与 HTTP 不同,websocket 在从 HTTP 升级后保持长期连接。
即使操作系统调整为使用所有端口,总共仍然只有 65536 个端口。NGINX 有可能超过这个限制吗?
一个潜在的解决方案是SO_REUSEPORT
,但它缺少文件——至少我没有找到除了下面这段
NGINX 1.9.1 版引入了一项新功能,可以使用 SO_REUSEPORT 套接字选项,该选项可用于许多操作系统的较新版本,包括 DragonFly BSD 和 Linux(内核版本 3.9 及更高版本)。此套接字选项允许多个套接字侦听相同的 IP 地址和端口组合。然后内核负载平衡跨套接字的传入连接。
因此,NGINX 调用accept
以接受入站连接。
accept() 系统调用与基于连接的套接字类型(SOCK_STREAM、SOCK_SEQPACKET)一起使用。它为侦听套接字提取挂起连接队列中的第一个连接请求,sockfd,创建一个新的连接套接字,并返回一个引用该套接字的新文件描述符。新创建的套接字不处于监听状态。原始套接字 sockfd 不受此调用的影响。
新的套接字会消耗端口吗?如果是,如何超过 65535 个连接限制?