Nginx中封装的数据结构

Nginx中封装的数据结构

  • Nginx中封装的数据结构
    • 整型
    • ngx_str_t【字符串】
    • ngx_list_t【链表】
    • ngx_table_elt_t【key/value】
    • ngx_buf_t
    • ngx_chain_t

Nginx中封装的数据结构

整型

typedef intptr_t        ngx_int_t;
typedef uintptr_t       ngx_uint_t;

ngx_str_t【字符串】

typedef struct {size_t      len; // 表示字符串的有效长度u_char     *data;// 表示字符串起始地址
} ngx_str_t;

ngx_list_t【链表】

typedef struct ngx_list_part_s  ngx_list_part_t;// 表示链表中的一个元素
struct ngx_list_part_s {void             *elts; // 指向数组的起始位置ngx_uint_t        nelts;//  表示数组中已经使用了多少个元素ngx_list_part_t  *next;// 下一个链表元素的地址
};// 存储数组的链表
typedef struct {ngx_list_part_t  *last; // 指向链表的最后一个元素ngx_list_part_t   part; // 指向链表的第一个元素size_t            size; // 限制存储值的大小ngx_uint_t        nalloc; // 每个ngx_list_part_t数组的容量ngx_pool_t       *pool; // 链表中管理内存分配的内存池对象
} ngx_list_t;

图解如下:
在这里插入图片描述

ngx_table_elt_t【key/value】

typedef struct ngx_table_elt_s  ngx_table_elt_t;struct ngx_table_elt_s {ngx_uint_t        hash; // 用于快速检索头部ngx_str_t         key; // 名字ngx_str_t         value; // 值u_char           *lowcase_key; // key全是小写ngx_table_elt_t  *next; // 
};

用于存储HTTP头部

ngx_buf_t

typedef void *            ngx_buf_tag_t;typedef struct ngx_buf_s  ngx_buf_t;u_char          *pos;  // 从这个位置开始处理内存中的数据u_char          *last; // 表示有效的内容的结束位置off_t            file_pos;  //  要处理文件的位置off_t            file_last; //  要处理文件的截止位置u_char          *start;         /* start of buffer */  // 要处理内存的起始地址u_char          *end;           /* end of buffer */    // 要处理内存的末尾地址ngx_buf_tag_t    tag;  // 缓冲区的类型,例如由哪个模块使用就指向这个模块变量的地址ngx_file_t      *file;  // 引用的文件类型ngx_buf_t       *shadow;/* the buf's content could be changed */unsigned         temporary:1; // 临时内存标记位,为1时表示数据在内存中且这段内存可以修改/** the buf's content is in a memory cache or in a read only memory* and must not be changed*/unsigned         memory:1; // 标志位,为1时表示数据在内存中且这段内存不可以被修改/* the buf's content is mmap()ed and must not be changed */unsigned         mmap:1; // 标志位,为1时表示这段内存是用mmap系统调用映射过来的,不可以被修改unsigned         recycled:1; // 标志位, 为1表示可回收unsigned         in_file:1; // 标志位,为1表示这段缓冲区处理的是文件而不是内存unsigned         flush:1; // 标志位,为1时表示需要执行flush操作unsigned         sync:1; // 标志位,对操作这块缓冲区是否使用同步方式,unsigned         last_buf:1; // 标志位,表示是否是最后一块缓冲区,因为ngx_buf_t可以由ngx_chain_t链表串联起来unsigned         last_in_chain:1; // 标志位,表示是否是ngx_chain_t中的最后一块缓冲区unsigned         last_shadow:1; // 标志位,表示是否为最后一个影子缓冲区unsigned         temp_file:1; // 标志位,表示当前缓冲区是否属于临时文件/* STUB */ int   num;
};

缓冲区,处理大数据,既用于存储内存数据,也用于存储磁盘数据。

ngx_chain_t

typedef struct ngx_chain_s           ngx_chain_t;struct ngx_chain_s {ngx_buf_t    *buf; // 指向当前的ngx_buf_t缓冲区ngx_chain_t  *next; // 指向下一个ngx_chain_t,如果是最后一个,则为NULL
};

在向用户发送HTTP包体时,就要传入ngx_chain_t链表对象,注意,如果是最后一个ngx_chain_t,那么必须将next置为NULL,否则永远不会发送成功,而且这个请求将一直不会结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/364817.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试题】信息系统安全运维要做什么

信息系统安全运维是确保信息系统稳定、可靠、安全运行的一系列活动和措施。 其主要包括以下几个方面: 1.系统监控: 实时监测信息系统的运行状态,如服务器的性能指标、网络流量、应用程序的运行情况等。通过监控工具,及时发现系统…

What does the error ‘module ‘langchain‘ has no attribute ‘verbose‘ refer to?

题意:错误 module langchain has no attribute verbose 指的是什么意思? 问题背景: Kind of new to Langchain/Qdrant but Im building a recommendation engine to recommend users based on the contents of their associated PDF files, …

typora取消源代码模式

如果typora不小心设置成了源代码模式 关闭源代码模式:

Django-开发一个列表页面

需求 基于ListView,创建一个列表视图,用于展示"BookInfo"表的信息要求提供分页提供对书名,作者,描述的查询功能 示例展示: 1. 数据模型 models.py class BookInfo(models.Model):titlemodels.CharField(verbose_name"书名",max_length100)authormode…

git 用户名密码Clone代码

#密码中包含,则使用%40代表 cd /disk03/wwwroot/GitDemo/BuildTemp && git clone -b dev --single-branch http://root:test%40123192.168.31.104/root/SaaS.Auto.Api.git git pull origin dev 今天使用LibGit2Sharp在Linux上Clone代码时报错,因…

使用 go-control-plane 自定义服务网格控制面

写在前面 阅读本文需要最起码了解envoy相关的概念 本文只是一个类似于demo的测试,只为了学习istio,更好的理解istio中的控制面和数据面(pilot -> proxy)是如何交互的,下图的蓝色虚线 先说go-control-plane是什么…

MySQL高级-MVCC-原理分析(RC级别)

文章目录 1、RC隔离级别下,在事务中每一次执行快照读时生成ReadView2、先来看第一次快照读具体的读取过程:3、再来看第二次快照读具体的读取过程: 1、RC隔离级别下,在事务中每一次执行快照读时生成ReadView 我们就来分析事务5中,两…

柯桥法语学习|学点黑话!法语中的「钱」可不止“argent”

法语中有哪些关于钱的“黑话”?一起来和法语君看一下吧! bl 之所以繁杂,是因为这些词在诞生之初,不止涉及一个故事,而是一大堆小轶事,以“bl”指钱的起源如迷宫般复杂。 根据Trsor de la langue frana15857…

VMware17安装Ubuntu20版本-保姆级别

首先需要安装好VMware和Ubuntu20的镜像,在网上搜索Ubuntu镜像下载即可,最后选择国内镜像站下载,这样更快点,然后打开VMware。 1.创建虚拟机: 2.选择自定义: 3.默认,继续下一步: 4.选…

kubuadm 方式部署 k8s 集群

准备三台机器 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233192.168.99.2332C4Gwoker1.23.1720.10.24 需要在K8S集群各节点上面安装docker,如未安装则参考 …

江协科技51单片机学习- p21 LED点阵屏(8*8)

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

ASP.NET CORE应用针对IIS有哪两种部署模式?

一、ASP.NET CORE Core Module IIS其实也是按照管道的方式来处理请求的,但是IIS管道和ASP.NET CORE中间件管道有本质的不同。对于部署在IIS中的Web应用来说,从最初接收到请求到最终将响应发出去,这段处理流程被细分为一系列固定的步骤&#x…

Python pip install模块时C++编译环境问题

pip install模块时C编译环境问题 在接触和使用python后,常常会通过pip install命令安装第三方模块,大多数模块可以直接安装,但许多新同学仍会遇见某些模块需要实时编译后才能安装,如报错信息大概是缺乏C编译环境,本文则…

MTK7628+MT7612 加PA定频数据

1、硬件型号TR726A5G121-DPA PC9.02.0017。如下所示: 2、WIFI5.8 AC模式 42(5120MHz)信道,80带宽 3、WIFI5.8 AC模式 38(5190MHz)信道,40带宽 4、WIFI5.8 AC模式 36(5180 MHz&…

双指针-移动 0(easy)

目录 一、问题描述 二、解题思路 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 1.开辟一个新数组,初始时元素都为0 2.设置两个指针,指针p1遍历旧数组,指针p2指向新数组的待修改位置 3.当p1指向非零元素时,将该元素…

Ubuntu20.04离线安装Docker

链接:https://pan.baidu.com/s/10OLClTHSIJY-_nbldcoFFQ 提取码:x4nt --来自百度网盘超级会员V4的分享 1.下载3个docker离线安装包,下载网址: https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/ 2.把…

【阅读论文】-- IDmvis:面向1型糖尿病治疗决策支持的时序事件序列可视化

IDMVis: Temporal Event Sequence Visualization for Type 1 Diabetes Treatment Decision Support 摘要1 引言2 1 型糖尿病的背景3 相关工作3.1 时间事件序列可视化3.2 电子健康记录可视化3.3 1 型糖尿病可视化3.4 任务分析与抽象 4 数据抽象5 层次化任务抽象5.1 临床医生工作…

Python逻辑控制语句 之 判断语句--if else结构

1.if else 的介绍 if else :如果 ... 否则 .... 2.if else 的语法 if 判断条件: 判断条件成立,执行的代码 else: 判断条件不成立,执行的代码 (1)else 是关键字, 后⾯需要 冒号 (2)存在冒号…

Unity扩展编辑器功能的特性

1.添加分组标题 用于在Unity的Inspector视图中为属性或变量组创建一个自定义的标题或头部,有助于在Inspector中组织和分类不同的属性,使其更易于阅读和管理。 [Header("Common Properties")] public float MouseSensitivity 5; public float…

15 个适用于企业的生成式 AI 用例

作者:来自 Elastic Jennifer Klinger 关于生成式人工智能及其能做什么(和不能做什么)有很多讨论。生成式人工智能(例如大型语言模型 - LLMs)利用从大量训练数据中学习到的模式和结构来创建原创内容,而无需存…