socket.io可以监听/附加到Python HTTP服务器吗?
抱歉,如果我用的术语不太准确。我有一个在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');