首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

nginx事件模块-第七篇 创建连接

微信公众号:郑尔多斯

关注可了解更多的知识。任何问题或建议,请公众号留言;

关注公众号,有趣有内涵的文章第一时间送达!

事件驱动框架

我们前面分析过,在中,会将每个监听端口的设置为函数,然后把对应的加入到驱动模块中。这样,在执行的时候,如果有新连接事件出现,那么就会调用方法进行建立连接。

为了解决惊群现象和负载均衡问题,使用了以及事件处理机制,那么什么是事件处理机制?

所谓的事件处理机制就是允许事件延后执行。设计了两个队列,一个是由被触发的监听连接的读事件构成的队列,另一个是由普通读/写事件构成的队列。

将产生的事件,分别存放到这两个队列中。让存放新连接事件的队列优先执行,存放普通事件的队列最后执行,这样就可以保证建立连接的及时性,同时这也是解决惊群和负载均衡的关键所在。

ngx_event_accept

上面的代码我做了删减,把一些错误判断和非平台代码删除,这个并不影响代码的功能和阅读,现在我们简单的分析一下这个源码:

首先这个是一个循环,循环的条件就是,该条件控制是否一次建立多个连接。

循环体首先使用函数创建一个连接

设置变量,然后调用获取一个连接。

下面就是设置我们上一步获取的连接的各个属性。

最重要的一步是最后的代码:

我们前面知道,其实就是,从这个函数开始,我们就进入了初始化的过程了。

multi_accept的作用

Syntax: multi_accept on | off;

Default: multi_accept off;

Context: events

If multi_accept is disabled, a worker process will accept one new connection at a time. Otherwise, a worker process will accept all new connections at a time.

The directive is ignored if kqueue connection processing method is used, because it reports the number of new connections waiting to be accepted.

中文翻译:

如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接。

如果nginx使用kqueue连接方法,那么这条指令会被忽略,因为这个方法会报告在等待被接受的新连接的数量。

如果启用了这个参数,那么当一个worker进程获取到accept_mutex之后,会一次尽可能的多的建立连接。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190102G0GIXT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券