Nginx建立连接的流程

作为服务器

在默认情况下,Nginx启动后,首先解析配置文件,获得监听端口与地址,初始化socket(创建socket,设置addrreuse等选项,绑定IP,listen),然后fork()出指定数目的子进程(worker进程),master进程关闭用于监听的socket,接由子进程竞争accept新的连接。此时,客户端就可以向Nginx发起连接了。客户端连接Nginx时,会引发惊群效应(可使用accept_mutex让Nginx每次只有一个worker进程进行连接),但是只有一个子进程会accept()成功,得到这个建立好的连接的socket,然后创建Nginx对连接的封装,即ngx_connection_t结构体。接着,设置读写事件并添加读写事件来与客户端进行数据的交换。最后,Nginx或客户端将主动关闭连接。至此,一个连接就完成了。

作为客户端

Nginx也是可以作为客户端来请求其他server的数据的(如upstream模块)。与其他server创建的连接,也封装在ngx_connection_t中。作为客户端,Nginx先获取一个ngx_connection_t结构体,然后创建socket,并设置socket属性。然后再通过添加读写事件,调用connect/read/write来调用连接,最后关闭连接,并释放ngx_connection_t。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容