Клиентская библиотека Socket.IO в Python

Может ли кто-нибудь порекомендовать клиентскую библиотеку Socket.IO для Python? Я посмотрел вокруг, но единственные, которые я могу найти, это либо реализация сервера, либо зависимость от структуры, такой как Twisted.

Мне нужна клиентская библиотека, которая не имеет зависимости от других фреймворков.

Просто использовать один из многих типов соединений недостаточно, так как клиент python должен работать с несколькими серверами socketio, многие из которых, например, не будут поддерживать веб-узлы.

  • Каков самый простой способ конвертировать ndarray в cv :: Mat?
  • Как получить имя функции в виде строки в Python?
  • Сервер Bluetooth с Python 3.3
  • Объединение файлов hdf5
  • Бинарный буфер в Python
  • Лучшая библиотека обработки видео для Python?
  • 6 Solutions collect form web for “Клиентская библиотека Socket.IO в Python”

    Ответ Archie1986 был хорошим, но устарел с обновлениями сокетов (точнее, его протокол: https://github.com/LearnBoost/socket.io-spec ) … насколько я могу судить, вам нужно выполнить рукопожатие вручную, прежде чем вы сможете запросить соединение с транспортом (например, websockets) … обратите внимание, что приведенный ниже код является неполным и небезопасным … во-первых, он игнорирует список поддерживаемых транспортов, возвращаемых в ответе на подтверждение, и всегда пытается получить websocket … также он предполагает, что рукопожатие всегда преуспевает … тем не менее, это хорошее место для начала

    import websocket, httplib ... ''' connect to the socketio server 1. perform the HTTP handshake 2. open a websocket connection ''' def connect(self) : conn = httplib.HTTPConnection('localhost:8124') conn.request('POST','/socket.io/1/') resp = conn.getresponse() hskey = resp.read().split(':')[0] self._ws = websocket.WebSocket( 'ws://localhost:8124/socket.io/1/websocket/'+hskey, onopen = self._onopen, onmessage = self._onmessage) .... 

    вы также можете прочитать на python-websockets: https://github.com/mtah/python-websocket

    Прежде всего, я не уверен, почему некоторые из ваших серверов Socket.IO не поддерживают веб-порты … Цель Socket.IO – облегчить разработку веб-приложений для браузера в интерфейсе, предоставляя абстрактный интерфейс для реального – время, передаваемое сервером Socket.IO. Возможно, Socket.IO не то, что вы должны использовать для своего приложения? В стороне, позвольте мне попытаться ответить на ваш вопрос …

    На данный момент нет никаких клиентских библиотек Socket.IO для Python (gevent-socketio не является клиентской библиотекой Socket.IO для Python … это серверная библиотека Socket.IO для Python). На данный момент вам нужно будет скомпоновать некоторый оригинальный код, чтобы напрямую взаимодействовать с Socket.IO как клиентом, принимая различные типы подключений.

    Я знаю, что вы ищете лекарство – все, что работает в разных типах соединений (WebSocket, длительный опрос и т. Д.), Но поскольку такой библиотеки еще не существует, я могу хотя бы дать вам некоторые рекомендации по используя тип соединения WebSocket, основанный на моем опыте.

    Для типа соединения WebSocket создайте клиент WebSocket в Python. Из командной строки установите этот пакет Python WebSocket Client здесь с помощью pip, чтобы он был на вашем пути python следующим образом:

    pip install -e git+https://github.com/liris/websocket-client.git#egg=websocket

    После этого попробуйте следующее, заменив SOCKET_IO_HOST и SOCKET_IO_PORT соответствующим расположением вашего сервера Socket.IO:

     import websocket SOCKET_IO_HOST = "127.0.0.1" SOCKET_IO_PORT = 8080 socket_io_url = 'ws://' + SOCKET_IO_HOST + ':' + str(SOCKET_IO_PORT) + '/socket.io/websocket' ws = websocket.create_connection(socket_io_url) 

    На этом этапе у вас есть среда взаимодействия с сервером Socket.IO непосредственно с Python. Для отправки сообщений на сервер Socket.IO просто отправьте сообщение через это соединение WebSocket. Чтобы сервер Socket.IO правильно интерпретировал входящие сообщения через этот WebSocket с вашего клиента Python Socket.IO, вам необходимо придерживаться протокола Socket.IO и кодировать любые строки или словари, которые вы можете отправлять через соединение WebSocket. Например, после того, как вы выполнили все вышеперечисленное, выполните следующие действия:

     def encode_for_socketio(message): """ Encode 'message' string or dictionary to be able to be transported via a Python WebSocket client to a Socket.IO server (which is capable of receiving WebSocket communications). This method taken from gevent-socketio. """ MSG_FRAME = "~m~" HEARTBEAT_FRAME = "~h~" JSON_FRAME = "~j~" if isinstance(message, basestring): encoded_msg = message elif isinstance(message, (object, dict)): return encode_for_socketio(JSON_FRAME + json.dumps(message)) else: raise ValueError("Can't encode message.") return MSG_FRAME + str(len(encoded_msg)) + MSG_FRAME + encoded_msg msg = "Hello, world!" msg = encode_for_socketio(msg) ws.send(msg) 

    Библиотека socketIO-client поддерживает обратные вызовы и каналы событий благодаря работе вкладчиков и доступна в PyPI по лицензии MIT.

    Эмит с обратным вызовом.

     from socketIO_client import SocketIO def on_bbb_response(*args): print 'on_bbb_response', args with SocketIO('localhost', 8000) as socketIO: socketIO.emit('bbb', {'xxx': 'yyy'}, on_bbb_response) socketIO.wait_for_callbacks(seconds=1) 

    Определить события.

     from socketIO_client import SocketIO def on_aaa_response(*args): print 'on_aaa_response', args socketIO = SocketIO('localhost', 8000) socketIO.on('aaa_response', on_aaa_response) socketIO.emit('aaa') socketIO.wait(seconds=1) 

    Определите события в пространстве имен.

     from socketIO_client import SocketIO, BaseNamespace class Namespace(BaseNamespace): def on_aaa_response(self, *args): print 'on_aaa_response', args self.emit('bbb') socketIO = SocketIO('localhost', 8000) socketIO.define(Namespace) socketIO.emit('aaa') socketIO.wait(seconds=1) 

    Определите разные пространства имен в одном сокете.

     from socketIO_client import SocketIO, BaseNamespace class ChatNamespace(BaseNamespace): def on_aaa_response(self, *args): print 'on_aaa_response', args class NewsNamespace(BaseNamespace): def on_aaa_response(self, *args): print 'on_aaa_response', args socketIO = SocketIO('localhost', 8000) chatNamespace = socketIO.define(ChatNamespace, '/chat') newsNamespace = socketIO.define(NewsNamespace, '/news') chatNamespace.emit('aaa') newsNamespace.emit('aaa') socketIO.wait(seconds=1) 

    Библиотека SocketTornad.IO с популярным асинхронным веб-сервером Tornado также является одним из вариантов, доступных для python.

    Написал один: https://github.com/amitu/amitu-websocket-client/blob/master/amitu/socketio_client.py . Он поддерживает только веб-узлы, поэтому для вас может быть только предельная полезность.

    Вы посмотрели gevent-socketio ?

    Надеюсь, поможет.

    Python - лучший язык программирования в мире.