Node.js的socket.io客户端+蟒蛇socketio(node.js socket.io-

2019-09-22 09:26发布

我试图使用Socket.IO,让我的Node.js应用与Python的后端通信。 我想的Node.js作为客户端和Python充当服务器,所以我使用的socket.io客户端的Node.js模块除了GEVENT-socketio Python模块。

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'});

出于某种原因,蟒蛇服务器中是不多见的连接。 任何人都可以指出我错过了什么?

Answer 1:

你需要一点点的Python端。

Namespace对象是不是要作为一个参数到SocketIOServer对象进行传递。 该resource (后重命名为namespace )只要识别的路径的名称(如http://本地主机/ [命名空间] / [所述socket.io协议路径的其余]我同意存在重叠在术语中,但是我们很少有比其他资源/命名空间处理socket.io

现在,为你的蟒蛇IO-服务器来运行,你需要使用一些框架把它包起来..实际派遣一些传入的请求到正确的处理程序。 该处理程序必须执行socketio_manage()这是你应该通过你的命名空间对象作为参数的函数。 此外,您的框架可能会想为其他文件,如瑞士法郎... GEVENT-socketio不会为你做的。 另外,如果你想你的Python程序做任何事情(如与数据库交互,加载一些配置文件),我建议你选择一个框架,因为它会减轻你的生活主要是什么,你需要做的事。

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

什么是您的特定用例? 这也许能够说明上要走的路的一些情况。



文章来源: node.js socket.io-client + python socketio