在nginx模块开始处理用户请求之前,首先需要nginx框架对客户端建立好链接,接收到客户端发来的起始行信息,再接收头部信息,根据头部信息再决定哪个server块执行。
一、接收请求事件模块
1、操作系统内核
当客户端发来SYN数据包,服务器操作系统内核会回一个SYN+ACK数据包,客户端再次发送一个ACK数据包时,就认为这这个链接建立成功,此时操作系统内核就会根据自己的负载均衡算法(服务器操作系统内核上的,非nginx的)选择一个CPU上的worker进程。
2、事件模块
该worker进程会使用epoll_create方法创建一个epoll对象,这个epoll对象中有一个红黑树和链表,worker进程会将接收到所有的链接文件描述符都放入红黑树中,包括活跃链接和不活跃链接,当接收到一个网络事件时,worker进程会将该网络事件对应的链接文件描述符放到链表中,epoll_wait会去读取链表中的内容。
以上过程,我可能理解的不准确。。。。。。
3、HTTP模块