当前位置: 首页 > news >正文

ngx_conf_handler - worker_connections 1024

static ngx_int_t
ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last)
{char           *rv;void           *conf, **confp;ngx_uint_t      i, found;ngx_str_t      *name;ngx_command_t  *cmd;name = cf->args->elts;found = 0;

此时

name->data=worker_connections


worker_connections 是 Nginx 中用于控制每个 工作进程(worker process) 能同时处理的最大连接数的配置参数

设置 worker_connections 1024;,则每个工作进程最多可同时处理 1024 个连接


    for (i = 0; cf->cycle->modules[i]; i++) {cmd = cf->cycle->modules[i]->commands;if (cmd == NULL) {continue;}for ( /* void */ ; cmd->name.len; cmd++) {if (name->len != cmd->name.len) {continue;}if (ngx_strcmp(name->data, cmd->name.data) != 0) {continue;}found = 1;

查找 worker_connections 指令


此时

cf->cycle->modules[6]->name=ngx_event_core_module

中 找到了 worker_connections 指令


            if (cf->cycle->modules[i]->type != NGX_CONF_MODULE&& cf->cycle->modules[i]->type != cf->module_type){continue;}/* is the directive's location right ? */if (!(cmd->type & cf->cmd_type)) {continue;}if (!(cmd->type & NGX_CONF_BLOCK) && last != NGX_OK) {ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"directive \"%s\" is not terminated by \";\"",name->data);return NGX_ERROR;}if ((cmd->type & NGX_CONF_BLOCK) && last != NGX_CONF_BLOCK_START) {ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"directive \"%s\" has no opening \"{\"",name->data);return NGX_ERROR;}/* is the directive's argument count right ? */if (!(cmd->type & NGX_CONF_ANY)) {if (cmd->type & NGX_CONF_FLAG) {if (cf->args->nelts != 2) {goto invalid;}} else if (cmd->type & NGX_CONF_1MORE) {if (cf->args->nelts < 2) {goto invalid;}} else if (cmd->type & NGX_CONF_2MORE) {if (cf->args->nelts < 3) {goto invalid;}} else if (cf->args->nelts > NGX_CONF_MAX_ARGS) {goto invalid;} else if (!(cmd->type & argument_number[cf->args->nelts - 1])){goto invalid;}}

通过语法校验


            /* set up the directive's configuration context */conf = NULL;if (cmd->type & NGX_DIRECT_CONF) {conf = ((void **) cf->ctx)[cf->cycle->modules[i]->index];} else if (cmd->type & NGX_MAIN_CONF) {conf = &(((void **) cf->ctx)[cf->cycle->modules[i]->index]);} else if (cf->ctx) {confp = *(void **) ((char *) cf->ctx + cmd->conf);if (confp) {conf = confp[cf->cycle->modules[i]->ctx_index];}}

 此时

            } else if (cf->ctx) {confp = *(void **) ((char *) cf->ctx + cmd->conf);

成立

cmd->conf=0


confp 指向一个数组,数组的每一个元素是一个指针,每一个指针指向一个 配置结构,这些配置结构是属于不同的 event 类型模块的


rv = cmd->set(cf, cmd, conf);

worker_connections 指令 的 set 函数


worker_connections 指令 的 set 函数-CSDN博客


            if (rv == NGX_CONF_OK) {return NGX_OK;}

返回 NGX_OK 代表 指令处理成功

相关文章:

  • OpenResty与Nginx的功能对比分析
  • visual studio 如何在 release 模式下调试
  • 中美电力标准差异下电机运行的影响及应对策略
  • 接口和抽象的区别?日常使用场景
  • WINUI——Background颜色使用小结
  • 2 cline 提示词工程指南-记忆库
  • 基于PySide6与pycatia的CATIA智能倒角工具开发全解析
  • 4月15号
  • 欧冠002:阿斯顿维拉 vs 巴黎圣日耳曼,维拉强攻致防线大开
  • SP B\nRebuild Priorit> 如何用python去掉\n
  • 用python比较两个mp4是否实质相同
  • VLAN的知识
  • Enovia许可优化技巧
  • Dockerfile 文件常见命令及其作用
  • 微服务最佳实践:全链路可用性保障体系
  • 06- 服务网格实战:从 Istio 核心原理到微服务治理升级
  • 案例实战LangChain的核武器-chain
  • WPS JS宏编程教程(从基础到进阶)-- 第七部分:JS对象在WPS中的应用
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day13
  • 泛微相关文档以及相关安装包下载
  • 针对“二选一”,美团再次辟谣
  • 史蒂夫·麦奎因透露罹患前列腺癌,呼吁同胞莫受困于男性气概
  • 2025年度“沪惠保”将于4月22日开售,保费不变
  • 全国登记在册民营企业超过5700万户,占企业总量92.3%
  • 成功卫冕!孙颖莎4比0战胜蒯曼,获澳门世界杯女单冠军
  • 上海明天有雷雨、大风,下周气温在春日舒适区间