typedef struct ngx_buf_s    ngx_buf_t;
typedef void  *ngx_buf_tag_t;
struct ngx_buf_s {/** pos通常是用来告诉使用者本次应该从pos这个位置开始处理内存中的数据,这样设置是因为同一个* ngx_buf_t可能被多次反复处理。当然,pos的含义是由使用它的模板定义的*/u_char  *pos;/* last通常表示有效的内容到此为止,注意,pos与last之间的内存是希望nginx处理的内容 */u_char  *last;/** 处理文件时,file_pos与file_last的含义与处理内存时的pos与last相同,* file_pos表示将要处理的文件位置,file_last表示截至的文件位置。*/off_t   file_pos;off_t   file_last;/* 如果ngx_buf_t缓冲区用于内存,那么start指向这段内存的起始地址 */u_char  *start;/* 与start成员对应,指向缓冲区内存的末尾 */u_char  *end;/* 表示当前缓冲区的类型,例如由哪个模块使用就指向这个模块ngx_module_t变量的地址 */ngx_buf_tag_t  tag;/* 引用的文件 */ngx_file_t  *file;/** 当前缓冲区的影子缓冲区,该成员很少用到。当缓冲区转发上游服务器的响应时才使用了shadow成员,* 这是因为nginx太节约内存了,分配一块内存并使用ngx_buf_t表示接收到的上游服务器响应后,* 在向下游客户端转发时可能会把这块内存存储到文件中,也可能直接向下游发送,此时nginx绝对不会* 重新复制一份内存用于新的目的,而是再次建立一个ngx_buf_t结构体指向原内存,这样多个ngx_buf_t* 结构体指向了同一份内存,它们之间的关系就通过shadow成员来引用,一般不建议使用。*/ngx_buf_t   *shadow;/* 临时内存标志位,为1时表示数据在内存中且这段内存可以修改 */unsigned    temporay:1;/* 标志位,为1时表示数据在内存中且这段内存不可以修改 */unsigned    memory:1;/* 标志位,为1时表示这段内存是用nmap系统调用映射过来的,不可以修改 */unsigned    mmap:1;/* 标志位,为1时表示可回收 */unsigned    recycled:1;/* 标志位,为1时表示这段缓冲区处理的是文件而不是内存 */unsigned    in_file:1;/* 标志位,为1时表示需要执行flush操作 */unsigned    flush:1;/** 标志位,对于操作这块缓冲区时是否使用同步方式,需谨慎考虑,这可能会阻塞nginx进程,nginx中所有* 操作几乎都是异步的,这是它支持高并发的关键。有些框架代码在sync为1时可能会有阻塞的方式进行I/O* 操作,它的意义视使用它的nginx模块而定。*/unsigned    sync:1;/** 标志位,表示是否是最后一块缓冲区,因为ngx_buf_t可以由ngx_chain_t链表串联起来,因此为1时,* 表示当前是最后一块待处理的缓冲区。    */unsigned    last_buf:1;/* 标志位,表示是否是ngx_chain_t中的最后一块缓冲区 */unsigned    last_in_chain:1;/* 标志位,表示是否是最后一个影子缓冲区,与shadow域配合使用。通常不建议使用它 */unsigned    last_shadow:1;/* 标志位,表示当前缓冲区是否属于临时文件 */unsigned    temp_file:1;
}

缓冲区ngx_buf_t是nginx处理大数据的关键数据结构,它既应用于内存数据也应用于磁盘数据。

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

buf指向当前的ngx_buf_t缓冲区,next则用来指向于下一个ngx_chain_t。如果这是最后一个ngx_chain_t,则需要把next置为NULL。

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

转载于:https://blog.51cto.com/sofar/1327728

Nginx学习笔记---ngx_buf_t数据结构相关推荐

  1. Nginx学习笔记---ngx_table_elt_t数据结构

    typedef struct {ngx_uint_t hash;ngx_str_t key;ngx_str_t value;u_char *lowcase_key; } ngx_table_elt_t ...

  2. 全是精髓!也许是最完美的“Nginx学习笔记”了,阿里云高工“365”天手写!

    前言 "Nginx",一个高性能的HTTP和反向代理web服务器,Nginx因为内存少.并发能力强的特性,深受虚拟机主机提供商的欢迎,可以支持高达50000个并发连接数的响应.Ng ...

  3. nginx 学习笔记(2) nginx新手入门

    这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...

  4. nginx学习笔记-01nginx入门,环境搭建,常见命令

    nginx学习笔记-01nginx入门,环境搭建,常见命令 文章目录 nginx学习笔记-01nginx入门,环境搭建,常见命令 1.nginx的基本概念 2.nginx的安装,常用命令和配置文件 3 ...

  5. python的基本数据结构_Python学习笔记——基本数据结构

    列表list List是python的一个内置动态数组对象,它的基本使用方式如下: shoplist = ['apple', 'mango', 'carrot', 'banana'] print 'I ...

  6. Nginx学习笔记3:Shell脚本检测Nginx服务状态

    前言 nginx 服务启动后,我们需要对其服务状态进行监控,今天学习过程中了解到一段非常有用的小脚本,不仅可以监控Nginx,也可以用来监控其他服务 脚本 A=`ps -C nginx –no-hea ...

  7. 【005】Nginx学习笔记-Nginx真实IP

    [005]Nginx学习笔记-Nginx真实IP 真实IP 客户端真实IP 深入理解真实IP 实验一 实验二: 多个代理服务器的情况 实验三:利用realip模块获取客户端真实IP 实验四:伪装请求头 ...

  8. Nginx学习笔记09——URLRewrite伪静态

    URLRewrite 伪静态配置 因为jsp获取url参数很方便,所以需要将tomcat服务器上的index.html转为jsp格式的,方式是在html文件开头加上<%@ page conten ...

  9. Nginx 学习笔记

    Nginx 学习笔记 文章目录 Nginx 学习笔记 1.Nginx 的简介 1.1正向代理 1.2反向代理 1.3负载均衡 1.4动静分离 1.5Nginx的安装 1.6Nginx的常用命令 1.7 ...

最新文章

  1. Python多线程中阻塞(join)与锁(Lock)的使用误区
  2. oracle 11gr2 单机数据库使用asm,RHEL7上安装11gR2单机使用ASM存储搭建Physical Standby笔记...
  3. 搜索专题【2010】四2.过河问题
  4. 有sql漏洞的php脚本,DedeCms V57 plus/search.php 文件SQL注射0day漏洞脚本安全 -电脑资料...
  5. 计算机网络第4版潘爱民_学术活动 钱江会计实务精英讲坛预告(第84期)| 何继昌 : 战略视角下之财务分析应用实践 兼选股案例分享...
  6. Linux 开发板4G转WiFi热点 手机连接热点上网(三 WiFi模块的移植及AP的建立)
  7. 如何分析request download在R3AR3显示成功执行,但是对应material没有生成的问题
  8. [Ext JS]5.9 嵌套Grid的实现及注意事项
  9. 计算机最低分怎么英语,编写一个学生类 有年龄 英语、数学、计算机三门成绩 求平均分、最高分、最低分...
  10. android开发案例3--学生通讯录
  11. log10/log2--求常用对数/以2为底的对数
  12. java word转换pdf(先自定义添加水印 后转换pdf)通过 aspose-words
  13. Java(springboot)连接MongoDB,终于成功啦T_T【呸】
  14. Taro 小程序开发大型实战(三):实现微信和支付宝多端登录
  15. 开启HSTS让浏览器强制跳转HTTPS访问
  16. 细小零件、产品边缘或曲面的无接触测厚技术研究
  17. 浅谈非极大值抑制和IOU
  18. node.js+uni计算机毕设项目联影医疗器械管理系统小程序(程序+小程序+LW)
  19. guest vlan
  20. Cocos2d-x动漫联盟横版格斗游戏截图

热门文章

  1. Quartz执行周期配置
  2. 用Keepalived搭建高可用集群
  3. 优化器--牛顿法总结
  4. HttpURLConnection解析
  5. animate.css(第三方动画使用方法)
  6. 简单区分Vmware的三种网络连接模式(bridged、NAT、host-only)
  7. CreateFileMapping共享内存时添加Global的作用
  8. flex 3名域namespace的使用有的也称命名空间
  9. ActiveMQ相关存储介绍
  10. Java消息中间件的概述与JMS规范