Nginx并发是如何突破socket 65535的限制?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

貔貅q 2017-03-09 20:14:48 5284

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

网络协议 应用服务中间件 nginx
分享到
取消 提交回答
全部回答(2)
  • 一溜
    2019-07-17 20:53:47

    首先要明白,tcp socket是需要占用什么资源。对于客户端,你需要有一个local port 来接收服务端发来的数据;而服务端就都使用相同的端口,那就是listen 的port。

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

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

    0 0
  • code10
    2019-07-17 20:53:47

    你说的65535 应该是系统可最大打开的端口数。nginx作为server,在socket上只需打开80和433就行。实际可建立的链接和OS的配置以及内存大小有关。

    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题