格式化消息以发送到socket.io node.js服务器从python客户端发送 |
您所在的位置:网站首页 › 现在什么行业较好 › 格式化消息以发送到socket.io node.js服务器从python客户端发送 |
百度翻译此文
有道翻译此文
问题描述
I'm trying to get a Python client talking to a Node.js server using Socket.io 0.7, by sending a custom event to the server. Based on the Socket.io reference I have found on GitHub, and the following WebSocket Python library. Here's is my code so far: Node server io.sockets.on('connection', function (socket) { socket.on('newimg', function(data) { console.log(data); }); });Python client 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()Node console output 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 transportPython console output Done 1:: 6:::1 Closing connectionNow it seems the socket event is not being triggered, despite the server responding with ACK. So the message is being correctly received but I am assuming, not formatted properly for socket.io to trigger an event. I didn't think framing was necessary, however Archie1986 seems to disagree on his response to this: Socket.IO Client Library in Python What might I be doing wrong here? 推荐答案Resolved. I needed to use double quotes. Single quotes are not valid JSON. Woops. ws.send("5:1::{'name':'newimg', 'args':'bla'}")Becomes: ws.send('5:1::{"name":"newimg", "args":"bla"}') 其他推荐答案I wrapped rod's research into a barebones socket.io client library. pip install -U socketIO-client python from socketIO_client import SocketIO with SocketIO('localhost', 8000) as socketIO: socketIO.emit('aaa') socketIO.wait(seconds=1) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |