Nginx基本数据结构(三)——ngx_chain_t、ngx_buf_t

2023-12-01 04:38

本文主要是介绍Nginx基本数据结构(三)——ngx_chain_t、ngx_buf_t,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • ngx_chain_t
    • 相关操作API
  • ngx_buf_t
    • 相关操作API
  • 参考文献

ngx_chain_t

Nginx的filter模块用来处理从别的filterhandler模块传递过来的数据。这个传递的过程是以一个链表(ngx_chain_t)的形式。而且数据可能会被多次传递。

struct ngx_chain_s
{ngx_buf_t		*buf;ngx_chain_t		*next;
}

相关操作API

ngx_chain_t* ngx_alloc_chain_link(ngx_pool_t* pool);
//创建一个ngx_chain_t对象,并返回指向对象的指针,失败返回null
#define ngx_free_chain(pool, cl)cl->next = pool->chain;pool->chain = cl//该宏释放一个ngx_chain_t对象
//对ngx_chain_t的释放,不是真正的释放内存,而是把这个对象挂在了这个pool对象的一个叫chain字段对应的chain上

ngx_buf_t

这个就是上面ngx_chain_t链表的每个节点的实际数据。

struct ngx_buf_s
{u_char			*pos;			//数据的开始位置u_char			*last;			//数据结束位置off_t			file_pos;		//如果是文件的话,数据开始位置off_t			file_last;		//如果是文件,数据结束位置u_char			*start;			//内存起始位置u_char			*end;			//内存结束位置ngx_buf_tag_t	tag;ngx_file_t		*file;			//对应的文件ngx_buf_t		*shadow;		unsigned		temporary:1;unsigned		memory:1;unsigned		mmap:1;unsigned		recycled:1;unsigned		in_file:1;unsigned		flush:1;unsigned		sync:1;unsigned		last_buf:1;unsigned		last_in_chain:1;unsigned		last_shadow:1;unsigned		temp_file:1;
};

相关操作API

#define ngx_alloc_buf(pool) ngx_palloc(pool, sizeof(ngx_buf_t))
#define ngx_calloc_buf(pool) ngx_pcalloc(pool, ngx_buf_t)ngx_buf_t* ngx_create_temp_buf(ngx_pool_t* pool, size_t size);
/*创建一个ngx_buf_t对象,返回指向这个对象的指针
* pool			分配该buf和buf使用的内存所使用的pool
* size			该buf使用的内存的大小
*/
//以下宏配合bgx_buf_t使用#define ngx_buf_in_memory(b)	(b->temporary || b-<memory ||b->mmap)
//返回buf是否有内容#define ngx_buf_in_memory_only(b)	(ngx_buf_in_memory(b) && !b->infile)
//返回buf内容只在文件而不在文件中#define ngx_buf_special(b)((b->flush || b->last_buf || b->sync)&& !ngx_buf_in_memory(b) && !b->in_file)
//返回这个buf是否是一个特殊的buf#define ngx_buf_synconly(b)(b->sync && !ngx_buf_in_memory(b) && !b->in_file)
//返回该buf是否是一个只包含sync标志而不包含真正数据的特殊buf#define ngx_buf_size(b)(ngx_buf_in_memory(b) ? (off_t)(b->last - b->pos):(b->file_last - b->file_pos))
//返回该buf所含数据的大小,不管数据在哪里

参考文献

[1] Nginx开发从入门到精通

这篇关于Nginx基本数据结构(三)——ngx_chain_t、ngx_buf_t的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/439838

相关文章

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

详解nginx 中location和 proxy_pass的匹配规则

《详解nginx中location和proxy_pass的匹配规则》location是Nginx中用来匹配客户端请求URI的指令,决定如何处理特定路径的请求,它定义了请求的路由规则,后续的配置(如... 目录location 的作用语法示例:location /www.chinasem.cntestproxy

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4