nginx http proxy接收响应过程(一)

        本篇博客主要阐述nginx如何从上游服务器接收响应的过程,响应包括响应header和响应body,在这里我们比较关注响应body的接收过程。

        因为nginx采用了全异步事件驱动模型,从上游服务器接收数据和向下游服务器发送数据也都是等待os通知相关socket fd上有事件发生后方可进行。我们这里不关心os如何通知nginx worker进程,只关心worker进程收到上游服务器的可读事件通知后如何处理。

        做法说起来应该很简单,nginx worker进程收到通知会调用事先注册的处理例程,在该处理例程中无非就是做这么几件事:1. 从socket fd上读数据,当然在读数据之前我们得准备好缓冲区,还得非常仔细地处理读出错的各种异常情况;2. 读完的数据可能得做些后续处理,如要不要对数据做些过滤啊什么的;3. 后续还有很多复杂的逻辑处理,我们这列举了这么两点。后面我们会通过nginx的处理来分析其内部如何高效地完成数据接收、暂存的功能。

       首先,我们从头说起,说说那个nginx与上游服务器的连接fd有读事件被触发的原始函数:ngx_http_upstream_process_upstream()。另外我们需要特别强调一点,为了实现读超时(即一定时间内还没有等到os对该连接的读事件),另外一个地方也可能会调用该函数,即该连接超时(为该读事件创建一个定时器放在红黑树上)时也会触发该函数,因此,在这个函数内必须还得判断到底是谁调用了它,如果是正常的读事件触发,那么后续需要从socket上读数据,如果真的是读超时触发的,那么就得进入错误处理逻辑了,让我们简单看看它的代码,揭开庐山真面目吧:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值