共享Socket.IO和WS之间的WebSocket连接

为了能够在使用Socket.IO的RPCfunction的同时发送二进制数据,我想我可以在同一台服务器上同时使用Socket.IO和WS模块。 而不是打开完全独立的服务器来build立两个连接,我想知道我是否可以使用相同的HTTP服务器。

是否可以同时使用一个由http.createServer()为Socket.IO和WS创build的服务器? 很明显,我期望从客户端创build一个Socket.IO连接和一个常规的WebSocket连接。 下面的代码在客户端创build协议错误,大概是因为Socket.IO和WS都试图处理连接。

 var http = require('http'); var server = http.createServer(app); server.listen(3000); // Socket.IO var io = require('socket.io').listen(server); io.sockets.on('connection', function (socket) { // ... } // ws var WebSocketServer = require('ws').Server var wss = new WebSocketServer({server: server}); wss.on('connection', function (ws) { // ... } 

截至2016年,我只是可以分配websocket模块的path

 var wss = new WebSocketServer({ server: server, path: '/ws' }); //do not interfere with socket.io 

根本不需要改变socket.io端

事实certificate,这是可能的一些configuration。 诀窍是告诉Socket.IO不要销毁nonSocket.IO WebSocket连接请求,然后将Socket.IO和WS放在不同的path上。 这里有一些混乱的示例代码,但是在重新使用Socket.IO会话ID进行辅助连接时它工作正常。

 var server = http.createServer(app); server.listen(3000); var WebSocketServer = require('ws').Server var io = require('socket.io').listen(server); io.set('destroy upgrade', false); io.set('transports', ['websocket']); io.sockets.on('connection', function (socket) { var wss = new WebSocketServer({ server: server, path: '/anythingYouWant/' + socket.id }); wss.on('connection', function(ws) { ws.on('message', function(message) { console.log(message); }); }); });