1

我有一个简单的节点 js Web 套接字服务器,如下所示:

var ws = require("nodejs-websocket")
var connectionCount = 0;
console.info("Node websocket started @ 8001");

var server = ws.createServer(function (conn) {;
    console.log("New connection", ++connectionCount);
    conn.on("close", function (code, reason) {
        console.log("Connection closed")
    });
}).listen(8001)

此服务器需要 65k 连接(因为一个端口最多需要 65k 连接)。如何扩展服务器以使其可以连接超过 10 万个连接?

我最近打开了三个具有不同端口的此类服务器,并尝试使用 nginx 进行负载平衡,但无济于事,因为 nginx 服务器也只能使用 65k 连接。nginx配置在这里

upstream localhost {
    server localhost:8001;
    server localhost:8002;
    server localhost:8003;
}


server {
    proxy_read_timeout 3600s;
    listen 8000;
    location / {
            proxy_pass http://localhost;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }
}

端口 8000 只能进行 65k 连接。

这些情况如何实时处理。我是这里的业余爱好者,需要一些好的指针来扩展服务器。该解决方案不必使用 nginx。它可以是任何东西。我只是想知道,如何处理这些问题。详细的答案表示赞赏。谢谢。

4

1 回答 1

4

65535 个端口的限制仅适用于传出连接,不适用于传入连接。

操作系统通过以下四个属性唯一标识一个连接/套接字:

  • 源 IP 地址
  • 源 TCP 端口 目标
  • 服务器的IP地址
  • 服务器 TCP 端口

因此,对于单个 IP 地址,您的 Node.js 或 Nginx 服务器最多可以维持 65535 个连接。对于不同的客户端 IP,唯一的限制是服务器的 CPU 和 RAM 资源。

也许您从单个客户端测试了这种行为?在这种情况下,您遇到了源 TCP 端口的限制。尝试从不同的客户端进行测试,您的服务器应该可以在超过 65535 个连接时正常工作。

于 2016-11-05T15:56:25.197 回答