socket.io可以监听/附加到Python HTTP服务器吗?

0 投票
1 回答
1054 浏览
提问于 2025-04-17 23:19

抱歉,如果我用的术语不太准确。我有一个在8000端口运行的Python HTTP服务器,基本上可以理解为

python -m SimpleHTTPServer 8000

如果我尝试在同一个端口上创建一个套接字连接,使用的是

var io = require('socket.io').listen(8000);

我会遇到以下错误

warn  - error raised: Error: listen EADDRINUSE

我明白listen(8000)是在尝试在8000端口上创建一个HTTP服务器,但这个端口已经被占用了,所以才会出现错误。

所以我的问题是:是否可以在一个已经存在的HTTP服务器上创建一个套接字连接,而这个服务器是通过Node.js以外的方式启动的?也就是说,能不能把这段代码中的“服务器”部分

var server = require('http').createServer(handler)
var io = require('socket.io').listen(server)

替换成一个已经在运行的HTTP服务器呢?

1 个回答

0

不,你不能让socket.io在一个不是nodejs环境下的服务器上工作。你可以使用Python的websocket实现,比如https://github.com/abourget/gevent-socketio。这个库是socket.io协议在Python中的实现,能够和几个知名的Python服务器兼容。

如果不这样做,我建议你就把这两个服务器分开,不要把它们合在一起。这样,你的主要Python网页服务器和nodejs的websocket服务器就可以分开运行。你可以创建一个单独的socket.io服务器,并把它绑定到一个和你的网页服务器不同的端口上:

var io = require('socket.io').listen(8001);

在前端,你需要连接到一个不同的socket.io服务器,如下所示:

var socket = io.connect('http://' + location.hostname + ':8001');

撰写回答