将节点升级到20.10(从14.7开始)和socket.io 4.7.2(从1.4.36开始)后无法连接到SSL websocket

问题描述 投票:0回答:1

我现在完全迷失了,所以任何见解将不胜感激......

我正在维护使用 Express 创建安全 WebSocket 的代码。原始的 socket.io 库是 v1,我已将其与节点 20.10(从 14.7 开始)一起更新为 v4。

问题是我无法让安全的 websocket 连接正常工作——客户端只是返回连接失败。客户端确实在端口 443 上成功连接到 secure Express 服务器以接收 websocket 连接端口信息。端口测试器确认套接字端口 4321 已打开。 使用带有连接字符串的在线套接字测试器连接到套接字也会失败:wss://{hostname}.com:4321/socket.io/?EIO=4&transport=websocket' 基于此,我必须相信我的客户端代码与该问题无关。但我想不出服务器设置可能有什么问题......它是否与 CORS 有关?与它是 Azure VM 有某种关系吗?

我希望这是显而易见的,因为它是一个很大的代码库。我仍然可以运行旧服务器,并且安全连接仍然可以使用相同的证书进行工作。当旧代码与 EIO=3 连接时,新代码尝试与 EIO=4 连接。

这就是我认为相关代码可能是:

节点模块: "socket.io": "^4.7.2", “socket.io-client”:“^4.7.2”,

服务器:

    import { Server, Socket } from 'socket.io';
    ...
    io = new Server(createServer(SSL.Credentials, app));
    io.listen(port); // port = 4321

客户:

    import { io, Socket } from 'socket.io-client';
     ...
    _socket = io(`wss://${hostname}:4321`, 
                { 
                  transports: ['websocket'], 
                  rejectUnauthorized: false 
                });

运行时客户端错误是:

    websocket.js:43 WebSocket connection to 'wss://{hostname}.com:4321/socket.io/?EIO=4&transport=websocket' failed:
    doOpen @ websocket.js:43
    open @ transport.js:46
    open @ socket.js:170
    Socket @ socket.js:111
    open @ manager.js:108
    Manager @ manager.js:39
    lookup @ index.js:29
    init @ DocServer.ts:192

我尝试使用 EIO=3 进行连接,但不知道如何做到这一点。我还尝试仅恢复网络代码,但由于其他软件包升级问题而没有成功。

express ssl websocket socket.io socket.io-client
1个回答
0
投票

好吧,明白了。服务器代码需要更改为:

const httpsServer = createServer(SSL.Credentials);
io = new Server(httpsServer, {})
httpsServer.listen(resolvedPorts.socket);
© www.soinside.com 2019 - 2024. All rights reserved.