gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:02:13 27 4
gpt4 key购买 nike

为了能够在利用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com