0

我在使用 socket.io 版本 3 时遇到了一个奇怪的问题。我试图transports:["websocket"]只使用它来避免轮询。我当前的设置是一个 EC2 实例作为我的服务器,NGINX 具有这些设置:

        location / {
                proxy_pass http://localhost:5030;
                proxy_http_version 1.1;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'Upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
    }

和:

worker_rlimit_nofile 40000;
events {
    worker_connections 20000;
    # multi_accept on;
}

我的服务器在集群模式下使用 PM2 运行,我使用 Redis 适配器如下:

var socketIo = require("socket.io");
var redisAdapter = require("socket.io-redis");

    io.attach(this.server, {
      transports: ["websocket"],
    });
    io.adapter(redisAdapter(process.env.REDISCLOUD_URL));

我的客户端也使用相同版本的 socket.io 并且只有 websockets。几天后一切正常,但使用 3-4 天后,由于传输关闭原因,套接字将不再连接。一开始我以为是我的 Redis DB 满了,但事实并非如此,它甚至还没有满。重新启动服务器后,它再次工作。我认为这是某种缺失的设置,但我找不到。我的 pingTimeout 是 5000,而 pingInterval 是 25000。

4

0 回答 0