En primer lugar, no estoy seguro de por qué algunos de sus servidores Socket.IO no son compatibles con websockets ... la intención de Socket.IO es facilitar el desarrollo de aplicaciones de web de navegador de primera línea, proporcionando un interfaz abstraída a las secuencias de datos en tiempo real atendidas por el servidor Socket.IO. ¿Tal vez Socket.IO no es lo que debería usar para su aplicación? Aparte de eso, vamos a tratar de responder a su pregunta ...
En este punto en el tiempo, no no hay bibliotecas de cliente Socket.IO para Python (GEvent-socketio es un cliente Socket.IO biblioteca Python ... es una biblioteca del servidor de Socket.IO para Python). Por ahora, vas a tener que juntar algunos códigos originales para poder interactuar con Socket.IO directamente como cliente y aceptando varios tipos de conexión.
Sé que está buscando una panacea que funcione en varios tipos de conexión (WebSocket, long-polling, etc.), pero dado que una biblioteca como esta no existe hasta el momento, al menos puedo dar da algunas indicaciones sobre el uso del tipo de conexión WebSocket en función de mi experiencia.
Para el tipo de conexión WebSocket, cree un cliente WebSocket en Python. Desde la línea de comandos instalar este paquete de cliente Python WebSocket here con pip por lo que es en su camino pitón de este modo:
pip install -e git+https://github.com/liris/websocket-client.git#egg=websocket
Una vez que hayas hecho esto Intente lo siguiente, reemplazando SOCKET_IO_HOST
y SOCKET_IO_PORT
con la adecuada ubicación de su servidor 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)
en este punto se tiene un medio de interactuar con un servidor Socket.IO directamente desde Python. Para enviar mensajes al servidor Socket.IO, simplemente envíe un mensaje a través de esta conexión WebSocket. Para que el servidor Socket.IO interprete correctamente los mensajes entrantes a través de este WebSocket desde su cliente Python Socket.IO, debe adherirse al protocolo Socket.IO y codificar cualquier cadena o diccionario que pueda enviar a través de la conexión WebSocket. Por ejemplo, después de que has logrado todo por encima de hacer lo siguiente:
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)
Esto funciona muy bien para mí. ¡Muchas gracias por la respuesta actualizada! Me gustaría que el OP volviera a promocionar este, porque la respuesta real (como usted señala) no va a funcionar realmente con la especificación actual. Completé el resto del código para una herramienta de línea de comando simple que funciona bien. Podría serle útil a otra persona: https://gist.github.com/1402238 Básicamente es solo tu código con otras cosas menores que son obvias en su mayoría, pero espero que le ahorre a alguien algo de tiempo. – drewww