Nginx极客时间:Nginx如何通过连接池处理网络请求

在 nginx.conf 配置文件中有这样一个配置项:

events {
	wocker_connections 1024;
}

这一配置项表示Nginx的最大并发连接数为1024,那么它会怎样的影响到Nginx的实现流程呢?


Nginx的连接池的表示方法:

在这里插入图片描述

Nginx中每一个worker进程都有一个独立的 ngx_cycle_t 结构体,Nginx框架是围绕着 ngx_cycle_t 结构体来控制进程运行的。

在 ngx_cycle_t 结构体中,有三个成员是用来表示连接池的:

typedef struct ngx_cycle_s ngx_cycle_t;

struct ngx_cycle_s {
	ngx_connection_t	*connections;	//数组,每个元素即表示一个网络连接
	ngx_event_t			*read_events;	//表示网络连接套接字上的读事件
	ngx_event_t			*write_events;	//表示网络连接套接字上的写事件
};

其中,*connections 、 *read_events、 *write_event 指向三个数组,分别表示网络连接、读事件、写事件,这三个数组的大小相同,元素个数都是 配置文件中 worker_connection 配置项所设置的大小,且三者是通过 数组下标序号 对应起来的,即 connections[5] 这个连接上的读事件和写事件分别是 read_events[5] 和 write_events[5]。

worker_connections 配置项的默认配置可以在Nginx官网中查到,值为512,这个大小是非常小的,因为Nginx动辄十万几十万的并发连接。
而且要注意:这个连接不仅是对于浏览器客户端的连接,而且也是面向上游服务器的,所以如果是做的反向代理业务,那么一个客户端连接就要消耗两个conneciton。

在这里插入图片描述

但是, worker_connections 这个配置项也不是配置的越大越好,因为要考虑到内存消耗的问题。
根据上面的描述,每一个 网络连接需要分配 一个 ngx_connection_t 结构体 和 两个 ngx_event_t 结构体(分表表示连接和读、写事件),则消耗的内存是:

1 * sizeof(struct ngx_connection_s) + 2 * sizeof(struct ngx_event_s) = 1 * 232 + 2 * 96;
//ngx_connection_s 与 ngx_event_s 结构体的大小 具体的Nginx的版本不同,可能会有微小的差异

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值