Форматирование сообщений для отправки на сервер socket.io node.js из клиента python

Я пытаюсь заставить клиента Python разговаривать с сервером Node.js с помощью Socket.io 0.7, отправив настраиваемое событие на сервер.

На основании ссылки Socket.io, которую я нашел на GitHub , и следующей библиотеки Python WebSocket .

Вот мой код:

Сервер узла

io.sockets.on('connection', function (socket) {
  socket.on('newimg', function(data) {
        console.log(data);
  });
});

Клиент 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()

Вывод консоли узла

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 

Вывод консоли Python

Done
1::
6:::1
Closing connection

Теперь кажется, что событие сокета не запускается, несмотря на то, что сервер отвечает ACK. Итак, сообщение получено правильно, но я предполагаю, что оно не отформатировано должным образом, чтобы socket.io инициировал событие.

Я не думал, что кадрирование было необходимо, однако Archie1986, похоже, не согласен с его ответом на это: Клиентская библиотека Socket.IO в Python

Что я здесь делаю не так?

20
задан Community 23 May 2017 в 12:02
поделиться