2011-07-14 16 views
19

से socket.io node.js सर्वर को भेजने के लिए संदेश स्वरूपण करना मैं सर्वर पर एक कस्टम ईवेंट भेजकर, Socket.io 0.7 का उपयोग कर एक पाइथन क्लाइंट को Node.js सर्वर से बात करने का प्रयास कर रहा हूं।python क्लाइंट

सॉकेट.ओ संदर्भ के आधार पर मुझे GitHub पर और WebSocket Python library पर मिला है।

यहाँ मेरी कोड अब तक है:

नोड सर्वर

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

अजगर ग्राहक

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 

अजगर सांत्वना उत्पादन

Done 
1:: 
6:::1 
Closing connection 

अब यह सर्वर एसीके साथ जवाब के बावजूद, सॉकेट ईवेंट को ट्रिगर नहीं किया जा रहा है लगता है। तो संदेश सही ढंग से प्राप्त किया जा रहा है, लेकिन मुझे लगता है कि, किसी घटना को ट्रिगर करने के लिए socket.io के लिए ठीक से प्रारूपित नहीं किया गया है।

मुझे नहीं लगता था तैयार जरूरी हो गया था, फिर भी Archie1986 इस के लिए अपने प्रतिक्रिया पर असहमत लगता है: Socket.IO Client Library in Python

क्या मैं गलत यहाँ क्या कर रही हो सकता है?

+1

हल हुआ। जैसे ही मुझे ऐसा करने की अनुमति है, मैं अपना उत्तर स्वीकार करूंगा। JSON के लिए डबल कोट्स की बजाय समस्या एकल का उपयोग करने में थी। – rod

उत्तर

14

हल हुआ। मुझे डबल कोट्स का उपयोग करने की आवश्यकता थी। एकल उद्धरण मान्य JSON नहीं हैं। ओह।

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

बन जाता है:

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

मैं एक barebones socket.io client library में rod के अनुसंधान लपेटा।

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

socketIO.wait क्या करता है? सेकेंड = 1 टाइमआउट है? – lmc