格式化消息从python客户端发送到socket.io node.js服务器

我试图通过发送一个自定义的事件到服务器,使用Socket.io 0.7来获取Python客户端与Node.js服务器交谈。

基于我在GitHub上find的Socket.io引用,以及下面的WebSocket Python库 。

这是我的代码到目前为止:

节点服务器

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 

现在看起来套接字事件没有被触发,尽pipe服务器响应ACK。 所以消息被正确接收,但我假设,没有正确的格式为socket.io触发一个事件。

我不认为框架是必要的,但是Archie1986似乎不同意他对此的回应: Python中的Socket.IO客户端库

我可能在这里做错了什么?

我把棒的研究包裹在一个准系统socket.io客户端库中 。

 pip install -U socketIO-client python from socketIO_client import SocketIO with SocketIO('localhost', 8000) as socketIO: socketIO.emit('aaa') socketIO.wait(seconds=1) 

解决。 我需要使用双引号。 单引号不是有效的JSON。 Woops。

 ws.send("5:1::{'name':'newimg', 'args':'bla'}") 

变为:

 ws.send('5:1::{"name":"newimg", "args":"bla"}')