【问题标题】:How to make more than 65k request on a port如何在端口上发出超过 65k 的请求
【发布时间】:2017-03-14 16:41:20
【问题描述】:

我有一个简单的node js web socket服务器如下:

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。它可以是任何东西。我只是想知道,如何处理这些问题。详细的答案表示赞赏。谢谢。

【问题讨论】:

    标签: nginx websocket load-balancing scalability c10k


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 是的,我从同一个客户端尝试过。我会调查一下,让你们知道。你的点是有效的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2016-03-29
    • 2012-12-22
    • 2011-01-07
    • 2015-12-09
    • 2020-08-22
    相关资源
    最近更新 更多