javascript - 在 Socket.IO 和 WS 之间共享 WebSocket 连接

标签 javascript node.js websocket socket.io

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

是否可以同时为 Socket.IO 和 WS 仅使用一个通过 http.createServer() 创建的服务器?明确地说,我希望从客户端创建 Socket.IO 连接和常规 WebSocket 连接。以下代码在客户端创建协议(protocol)错误,大概是因为 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) {
    // ...
}

最佳答案

事实证明,这可以通过一些配置实现。诀窍是告诉 Socket.IO 不要破坏非 Socket.IO 的 WebSocket 连接请求,然后将 Socket.IO 和 WS 放在不同的路径上。这是一些困惑的示例代码,但它在为辅助连接重用 Socket.IO session 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);
        });
    });
});

关于javascript - 在 Socket.IO 和 WS 之间共享 WebSocket 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749315/

相关文章:

javascript - 使用 WebSockets 或 WebRTC 发送的数据需要 CRC 吗?

javascript - 使用 Python 或 JavaScript 获取到 WhatsApp 的 websocket 连接?

javascript - 如何使用 Jquery 将所有输入值更改为大写?

mysql - node.js 使用两个表获取 mysql 数据

node.js - mongodb 获取最喜欢帖子的用户

node.js - Dropbox api V2,在查询参数中获取访问 token 而不是 url 哈希 (#) (Nodejs)

websocket - 从 socket.io 迁移到原始 websockets?

javascript - Safari : Disable form-submit on Enter?

php - Ajax 自动更新和服务器负载

javascript - 如何在 Rails 中格式化电话号码?