开发者社区> 问答> 正文

Nginx并发是如何突破socket 65535的限制?

nginx接收到客户端连接,应该是构建了一个TCP连接,看很多解释,但还是不太明白具体原理。我看有的是说nginx每个worker进程,通过worker_connections构建了一个ngx_connection_t结构的连接池,连接放在这个连接池中,并没有占用socket的数量,通过epoll的异步可以用的时候再创建socket套接字。谁能帮我完整地梳理一下Nginx突破 65535的原理么

展开
收起
貔貅q 2017-03-09 20:14:48 10335 0
2 条回答
写回答
取消 提交回答
  • 首先要明白,tcp socket是需要占用什么资源。对于客户端,你需要有一个local port 来接收服务端发来的数据;而服务端就都使用相同的端口,那就是listen 的port。

    这样,在服务端(nginx)看到的socket,就都会是服务端口为80或者443的;这个时候,nginx进程能够处理的socket数量,就仅仅受限于服务端对进程fd(文件描述符)数量的限制。如果你设置为unlimited,则这个限制就仅仅受限于操作系统的内存大小了。

    简单来说就是,tcp socket ,请求发起方的端口是稀缺资源,不同socket不能重复;而服务端的socket,都是使用相同的端口(监听什么,就是什么)。

    2019-07-17 20:53:47
    赞同 展开评论 打赏
  • 你说的65535 应该是系统可最大打开的端口数。nginx作为server,在socket上只需打开80和433就行。实际可建立的链接和OS的配置以及内存大小有关。

    2019-07-17 20:53:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
《Nginx 代理系统常用手册》 立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手 立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册 立即下载