Прежде всего, я не уверен, почему некоторые из ваших серверов Socket.IO не будут поддерживать веб-сокеты... цель Socket.IO состоит в том, чтобы упростить разработку веб-приложений во внешнем браузере, предоставив абстрактный интерфейс для реального -time потоки данных, обслуживаемые сервером Socket.IO. Возможно, Socket.IO — это не то, что вам следует использовать для своего приложения? Кроме того, позвольте мне попытаться ответить на ваш вопрос...
На данный момент не существует клиентских библиотек Socket.IO для Python (gevent-socketio не является клиентской библиотекой Socket.IO для Python... это Socket.IO серверную библиотеку для Python). На данный момент вам придется собрать исходный код, чтобы напрямую взаимодействовать с Socket.IO в качестве клиента, принимая различные типы соединений.
Я знаю, что вы ищете панацею, которая работает с различными типами соединений (WebSocket, long-polling и т. д.), но поскольку такой библиотеки пока не существует, я могу, по крайней мере, дать вам некоторые рекомендации по используя тип подключения WebSocket, основанный на моем опыте.
Для типа подключения WebSocket создайте клиент WebSocket в Python. Из командной строки установите этот пакет клиента Python WebSocket здесь с помощью 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)
person
Archie1986
schedule
31.05.2011