如何在同一个 Node.js 应用程序上使用具有不同库版本的多个 socket.io 服务器

How use multiple socket.io servers with different library version on the same Node.js application

正如标题所示,我试图在同一个应用程序中使用两个不同的 socket.io 服务器,一个使用 socket.ioV4,另一个使用 socket.ioV2,服务器运行起来,但我无法连接插座。

一些上下文:我尝试这样做的原因是因为两个客户端需要使用 Node.js 应用程序作为桥梁来交换数据,并且每个客户端都需要不同版本的 socket.io 包(如前所述,V4 与 V2)。

我设法做到的:我像往常一样安装了 V4 版本,并使用别名安装了 V2 版本

npm install socket.io@^4.4.1

npm install socket.io-v2@npm:socket.io@2.0.1

我用

创建了两个服务器
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = new Server(server);

const v2_server = require('http').Server(app);
const iov2 = require('socket.io-v2')(v2_server);

socket.io 服务器是这样定义的

io.on('connection', (socket) => {
    // DEBUG
    console.log("V4 data received");
})

iov2.on('connection', (socket) => {
    // DEBUG
    console.log("V2 data received");
})

然后我在两个不同的端口上启动两个服务器

app.get("", (req, res)=>{
res.sendFile(__dirname + '/static/test.html')
})


server.listen(conn_port, () => {
    console.log("V4 server started.")
})


v2_server.listen(v2_conn_port, () => {
    console.log("V2 server started.")
})

它们确实出现了 运行,因为两个日志都已打印。

然而,当我尝试在两个端口上连接到本地主机时,虽然我确实看到了提供的 html 页面,但 socket.io 连接似乎没有通过,因为两者都没有出现“Vx 数据接收”日志(并且用于交换数据的测试页面上的按钮无响应)。

我很确定这里可能有太多错位或误解的地方,因为我只是在 node.js 和一般的网络服务器上迈出第一步,所以在此先感谢您的帮助和耐心!

您不能在同一个 HTTP 端口上创建两个服务器。但是,您可以在不将其附加到 HTTP 端口的情况下执行类似的操作:

const { Server } = require('socket.io');
const firstServer = new Server();
firstServer.listen(3000);

const secondServer = new Server();
firstServer.listen(4000);

好吧,没关系,原来在静态 HTML 中有一个非常愚蠢的错误(忘记了修复我正在处理的测试分支中的拼写错误...)。

所以,现在一切都出乎意料地完美运行!

对于任何可能到达这里并对代码感兴趣的人,我把它留在这里(虽然知道它可能很糟糕,但完成了工作)。

https://github.com/hypothe/bomi_fama_nodejs