第二十五讲:网络收发与Nginx事件的对应关系
Nginx是一个事件驱动的框架,所谓事件主要是指网络事件,那么Nginx每个连接会自然对应两个事件,一个读事件,一个写事件,所以我们在深入了解Nginx的各种原理,以及它在极端场景下的错误场景的处理时,我们必须首先理解什么是网络事件,下面我们来看如下的图:

比如主机A就是我们在家里的一台笔记本电脑,主机B尼就是我们的服务器上面跑的Nginx;从主机A发送一个http的get请求发送到主机B,这样的一个过程中究竟经历了哪些网络事件尼?
比如数据流图示:
应用层里发送了一个get请求;那么到了传输层尼,它主要在做一件事情,就是我的浏览器打开了一个端口,它会把这个端口记录下来;以及把Nginx打开的端口也记录到传输层;然后在网络层会记录我们主机所在的IP和目标主机也就是Nginx所在那台服务器的公网IP,然后到链路层以后经过以太网,到达我们家的路由器,我们家的路由器里尼会记录下我们所在运行商的下一段的IP,经过广域网以后最终跳转到主机B所在的机器中,这个时候报文会通过链路层,网络层,传输层,经历到传输层以后尼,操作系统就知道给之前打开端口的Nginx进程,Nginx在它的状态处理机里面即应用层里面就会处理这个请求;
在这样的一个过程中,网络报文扮演了怎样的一个角色尼?
我们看下TCP的报文
比如数据链路层,它会在我们数据的前面header部分和最尾的footer部分添加上我们的源MAC地址和目的MAC地址;
到了网络层尼,在头部和尾部会加上我们Nginx的公网地址和我们浏览器的公网地址,
到了传输层会指定我们Nginx打开的端口和浏览器打开的端口,
到了应用层就是我们的HTP协议;
这整个过程就是一个报文;也就是说我们发送的HTTP协议会切割成很多小的报文,

这个时候我们再来看一看TCPx协议中许多事件是怎样和我们日常调用接口,比如accept read write close这些事件是怎样关联在一起的,
比如请求建立TCP连接事件,实际上是发送了一个TCP报文其实是一个读事件,因为对nginx来说,我读取了一个报文;
如果是TCP连接可读事件,也就是说我们发送了一个消息,对nginx来说也是一个可读事件,
如果是对端,也就是我们的浏览器主动的关掉了,对nginx来说还是一个读事件,
那什么样的是写事件尼?
当我们的nginx需要 向浏览器发送响应的时候,我们需要把消息写到我们的操作系统中;
向这样一些网络中的读写事件,通常在Nginx中或者任何一个异步事件的处理框架中它会有一个东西叫做事件收集分发器;
我们会定义每类事件它处理的消费者,也就是说事件是一个生产者;是通过网络自动的生产到我们的nginx中的,我们对每种事件要建立一个消费者;


浙公网安备 33010602011771号