Estoy intentando que un cliente Python hable con un servidor Node.js usando Socket.io 0.7, enviando un evento personalizado al servidor.Formateo de mensajes para enviar al servidor socket.io node.js desde el cliente python
Basado en la referencia Socket.io que he encontrado en GitHub, y en la siguiente WebSocket Python library.
He aquí es mi código hasta ahora:
servidor Nodo
io.sockets.on('connection', function (socket) {
socket.on('newimg', function(data) {
console.log(data);
});
});
cliente
Python
def handshake(host, port):
u = urlopen("http://%s:%d/socket.io/1/" % (host, port))
if u.getcode() == 200:
response = u.readline()
(sid, hbtimeout, ctimeout, supported) = response.split(":")
supportedlist = supported.split(",")
if "websocket" in supportedlist:
return (sid, hbtimeout, ctimeout)
else:
raise TransportException()
else:
raise InvalidResponseException()
try:
(sid, hbtimeout, ctimeout) = handshake(HOSTNAME, PORT) #handshaking according to socket.io spec.
Except Exception as e:
print e
sys.exit(1)
ws = websocket.create_connection("ws://%s:%d/socket.io/1/websocket/%s" % (HOSTNAME, PORT, sid))
print ws.recv()
ws.send("2::")
ws.send("5:1::{'name':'newimg', 'args':'bla'}")
print ws.recv()
print "Closing connection"
ws.close()
salida de la consola Nodo
debug - client authorized
info - handshake authorized 12738935571241622933
debug - setting request GET /socket.io/1/websocket/12738935571241622933
debug - set heartbeat interval for client 12738935571241622933
debug - client authorized for
debug - websocket writing 1::
debug - websocket received data packet 2::
debug - got heartbeat packet
debug - websocket received data packet 5:1::{'name':'newimg', 'args':'bla'}
debug - acknowledging packet automatically
debug - websocket writing 6:::1
info - transport end
debug - set close timeout for client 12738935571241622933
debug - cleared close timeout for client 12738935571241622933
debug - cleared heartbeat interval for client 12738935571241622933
debug - discarding transport
consola de Python salida
Done
1::
6:::1
Closing connection
ahora parece que el evento conector no está siendo activado, a pesar de que el servidor responde con ACK. Por lo tanto, el mensaje se está recibiendo correctamente, pero asumo que no tiene el formato adecuado para que socket.io active un evento.
No pensé que enmarca era necesario, sin embargo Archie1986 parece no estar de acuerdo en su respuesta a esto: Socket.IO Client Library in Python
¿Qué podría estar haciendo mal aquí?
Resuelto. Aceptaré mi propia respuesta tan pronto como se me permita hacerlo. El problema estaba en utilizar comillas simples, en vez de dobles para JSON. – rod