欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

yoxi123123123 高并发web服务器nginx源码全面中文分析注释,带详细函数注释及函数调用注释,附github地址,

程序员文章站 2022-04-23 12:50:40
...
带详细函数注释及函数调用注释,附github地址,每个配置源码中详细说明,所有日志打印带上函数名和行号,更好的日志定位分析
之前在nginx版本发过,发现大部分关系该项目的都是JAVASCRIPT PHP PYTHON的兄弟,因此再次重发一次
对nginx进行了通读分析,并对函数进行了详细注释。同时对相关功能进行了优化,日志功能分析能力更易懂。
github地址下载:
https://github.com/y123456yz/reading-code-of-nginx-1.9.2
或者在github官网搜索reading-code-of-nginx-1.9.2

对linux内核网络协议栈底层实现有兴趣的,也可以看看这里哈,带详细协议栈源码分析
https://github.com/y123456yz/Reading-and-comprehense-linux-Kernel-network-protocol-stack

php代码

/*
    connection_pool_size
    语法:connection_pool_size size;
    默认:connection_pool_size 256;
    配置块:http、server
    Nginx对于每个建立成功的TCP连接会预先分配一个内存池,上面的size配置项将指定这个内存池的初始大小(即ngx_connection_t结构体中的pool内存池初始大小,
    9.8.1节将介绍这个内存池是何时分配的),用于减少内核对于小块内存的分配次数。需慎重设置,因为更大的size会使服务器消耗的内存增多,而更小的size则会引发更多的内存分配次数。
    */
    { ngx_string("connection_pool_size"),
      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
      ngx_conf_set_size_slot,
      NGX_HTTP_SRV_CONF_OFFSET,
      offsetof(ngx_http_core_srv_conf_t, connection_pool_size),
      &ngx_http_core_pool_size_p },
  
/*
语法:request_pool_size size;
默认:request_pool_size 4k;
配置块:http、server
Nginx开始处理HTTP请求时,将会为每个请求都分配一个内存池,size配置项将指定这个内存池的初始大小(即ngx_http_request_t结构体中的pool内存池初始大小,
11.3节将介绍这个内存池是何时分配的),用于减少内核对于小块内存的分配次数。TCP连接关闭时会销毁connection_pool_size指定的连接内存池,HTTP请求结束
时会销毁request_pool_size指定的HTTP请求内存池,但它们的创建、销毁时间并不一致,因为一个TCP连接可能被复用于多个HTTP请求。
*/
    { ngx_string("request_pool_size"),
      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
      ngx_conf_set_size_slot,
      NGX_HTTP_SRV_CONF_OFFSET,
      offsetof(ngx_http_core_srv_conf_t, request_pool_size),
      &ngx_http_core_pool_size_p },
 
 
 
//这个函数完成的功能很简单就是将server_name指令指定的虚拟主机名添加到ngx_http_core_srv_conf_t的server_names数组中,以便在后面对整个web server支持的虚拟主机进行初始化。
static char *
ngx_http_core_server_name(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
    ngx_http_core_srv_conf_t *cscf = conf;
 
    u_char                   ch;
    ngx_str_t               *value;
    ngx_uint_t               i;
    ngx_http_server_name_t  *sn;