请问作者Gatewayworker 分布式长连接 Nginx 代理超10w连接

meows

问题描述

举个例子:Gatewayworker 这时候有20W websocket 长连接,前面需要挂Nginx代理,但单机最大代理客户端<= 65535

为此你搜索到了哪些方案及不适用的原因

请问如何才能超出6w+,达到20w长连接代理客户端呢?

396 1 5
1个回答

walkor

一个连接包含四个部分,本地ip+本地端口+远程ip+远程端口,这四个元素唯一标记一个连接。本地端口有限制最高65535,所以只需要更改本地ip 远程ip 远程端口即可突破65535限制。所以就有多种方案

1、比如nginx本地代理,你可以用 127.0.0.1 和 192.168.xx.xx(内网ip) 去连远程端口,就可以达到2个65535限制

upstream webman {
    server 127.0.0.1:8787;
    server 192.168.xx:xx:8787;
}

2、你也可以给linux系统添加一个虚拟ip,这样想多少个65535都可以。注意要有话linux内核 https://www.workerman.net/doc/workerman/appendices/kernel-optimization.html ,尤其是 Soft open files 这些。

3、比如gateway开多个端口也可以,几个端口就有几个65535连接。

4、比如直接用unixsocket也行,就没有本地端口限制

  • meows 2023-09-13

    感谢walkor 大佬回答

  • meows 2023-09-13

    nginx 主机IP192.158.23.32, 这时候连接到如下主机:
    upstream webman {
    server 127.0.0.1:8787;
    server 192.168.xx:xx:8787;
    keepalive 10240;
    }

    这时候是不是客户端的端口号是允许重复的吗?
    举个例子:
    IP192.158.23.32:65000 -> connect server 192.168.xx:xx:8787;
    IP192.158.23.32:65000 -> connect server 127.0.0.1:8787;
    walkor 大佬是这意思吧!感谢你的解答。

  • walkor 2023-09-13

    理论上是可以重复的,四个元素只要有一个不同即可

  • meows 2023-09-13

    好的,感谢walkor大佬答疑。

🔝