node.js socket.io-client + python socketio

我正在尝试使用Socket.IO来允许我的Node.JS应用程序与Python后端进行通信。 我希望Node.JS充当客户端,Python充当服务器,所以除了gevent-socketio python模块之外,我还使用了socket.io-client Node.JS模块。

https://github.com/LearnBoost/socket.io-client https://github.com/abourget/gevent-socketio

这是我的Python服务器:

#!/usr/bin/env python from socketio.server import SocketIOServer from socketio.namespace import BaseNamespace class MyNamespace(BaseNamespace): def on_foobar(self,data): print 'received method for foobar' print data server = SocketIOServer(('localhost', 1234),resource=MyNamespace,policy_server=False) print 'SocketIO server listening...' server.serve_forever() 

这是我的Node.JS服务器(充当客户端):

 #!/usr/bin/env node var io = require('socket.io-client'); var PySocket = io.connect('localhost:1234'); PySocket.emit('foobar',{'key1':'value1'}); 

出于某种原因,python服务器没有看到连接。 任何人都可以指出我错过了什么?

您需要在Python方面多一点。

Namespace对象不能作为parameter passing给SocketIOServer对象。 这个resource (后来重命名为namespace )只是要识别的path的名称(如http:// localhost / [namespace] / [socket.io协议path的其余部分]。我同意术语中有重叠,但是我们很less处理socket.io以外的资源/名称空间。

现在,为了让你的python IO服务器运行,你需要使用一些框架来包装它,以便将一些传入的请求实际分派给正确的处理程序。 该处理程序必须执行socketio_manage() ,这是您应该将Namespace对象作为parameter passing的函数。 此外,你的框架可能会想要服务其他文件,如.swf … gevent-socketio不为你这样做。 另外,如果你希望你的python进程做任何事情(比如与数据库交互,加载一些configuration文件),我推荐你select一个框架,因为它会减轻你的生活,主要是你需要做的任何事情。

如果你真的只想要一个sockettypes的服务器,从node.js到Python,那么为什么不使用标准的TCP / UDP套接字呢? 在这种情况下,你不需要框架的开销,Socket.IO协议的编码/解码等等。

你特定的用例是什么? 也许这可能会让我们走上一些道路。