前面一篇博客中我们阐述了nginx有读、写事件到来时是如何触发相应处理函数来执行的,并且执行的大致逻辑是怎样,我们这里就仔细地深入分析nginx是怎样从上游服务器读取响应数据,具体的实现为ngx_event_pipe_read_upstream。
我们仔细思考下这个函数到底需要干些什么,为了能顺利地从上与上游服务器的连接上读出数据,我们必须首先准备好容纳数据的缓冲区,准备缓冲区这本身可能就是一个非常复杂的过程,我们会在下面仔细描述。
准备好缓冲区以后,需要从socket上读数据,当然,我们还得处理读数据异常的情况(如返回值为0,返回值小于0时还得判断错误原因是否是EAGAIN等等...)。
如果数据被正确读出到实现准备好的缓冲区中,我们可能还得进一步作些处理,如对于已经盛满数据的缓冲区可能得腾挪到别的位置(别急,我会在后面给你一一解开纽扣)。其实,除了这些,好像也没别的复杂的东西了,看起来挺吓唬人的罢了。