jsp怎么做网站的删除,wordpress分类信息导航,百度 手机网站 友好性,响应式网页设计与制作文章目录 前述一、nginx 进程模型基本流程二、源码里的小点1.对字符串操作都进行了原生实现2.配置文件解析也是原生实现待续 前述
通过对 nginx 的了解和代码简单阅读#xff0c;发现这个C代码的中间件确实存在过人之处#xff0c;使用场景特别多#xff0c;插件模块很丰富… 文章目录 前述一、nginx 进程模型基本流程二、源码里的小点1.对字符串操作都进行了原生实现2.配置文件解析也是原生实现待续 前述
通过对 nginx 的了解和代码简单阅读发现这个C代码的中间件确实存在过人之处使用场景特别多插件模块很丰富近些年 nginx 用户量也是飙升所以和大家一起学习下 nginx 源码。后续通过阅读源码方式不断更新本篇文章希望能够坚持读下去并给大家带来 nginx 源码级的阅读体验。[抱拳]
个人阅读的 nginx 代码版本度盘 nginx-release-1.26.0.tar.gz
其他或最新版本见 nginx 官网https://nginx.org/
一、nginx 进程模型基本流程 当然了除了上述进程模型流程I/O多路复用技术也是必然的大家可以从目录 nginx-release-1.26.0\src\event\modules\ 下找到 这个实现也是比较丰富的如果不熟悉I/O多路复用可阅读I/O多路复用技术最佳学习实践及总结含完整实现源码 。
二、源码里的小点
1.对字符串操作都进行了原生实现
详见 nginx-release-1.26.0\src\core\ngx_string.h
抽取了一个进行了测试如下
#include bits/stdc.h#define NGX_OK 0
#define NGX_ERROR -1#define NGX_MAX_INT_T_VALUE 99999999int
ngx_atoi(unsigned char *line, size_t n)
{int value, cutoff, cutlim;if (n 0) {return NGX_ERROR;}cutoff NGX_MAX_INT_T_VALUE / 10;cutlim NGX_MAX_INT_T_VALUE % 10;for (value 0; n--; line) {if (*line 0 || *line 9) {return NGX_ERROR;}if (value cutoff (value cutoff || *line - 0 cutlim)) {return NGX_ERROR;}value value * 10 (*line - 0);}return value;
}int main()
{unsigned char str[] 999;std::cout ngx_atoi(str, strlen((char*)str)) - 1 std::endl;return 0;
}2.配置文件解析也是原生实现
nginx中配置是以 command 的方式展现的如 类型 ngx_command_t 的 ngx_core_commands nginx 核心运行相关命令的全局变量是的一个结构体数组附着于 ngx_module_t ngx_core_module 之上。文件nginx-release-1.26.0\src\core\nginx.c
ngx_core_commands 结构如下除了 daemon 和 worker_processes 指定工作进程数auto 表示自动根据 CPU 核心数设置 其他都折叠起来了。
ngx_command_t 结构体如下与上述图片中的参数结合来看set是对应的回调
struct ngx_command_s {ngx_str_t name;ngx_uint_t type;char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);ngx_uint_t conf;ngx_uint_t offset;void *post;
};typedef struct ngx_command_s ngx_command_t;相同的 ngx_http_core_commands 于 ngx_http_core_module 之上。文件nginx-release-1.26.0\src\http\ngx_http_core_module.c
ngx_mail_core_commands 于 ngx_mail_core_module 之上。文件nginx-release-1.26.0\src\mail\ngx_mail_core_module.c
…
类推的其他模块的配置都是这样通过预定义的 static ngx_command_t 静态全局变量绑定到自身模块结构体 static ngx_core_module_t ngx_*_module_ctx 上去。上述就是nginx的配置方式了需要看哪个配置直接去对应的 src/* 模块看即可。
待续