网站大量收购闲置独家精品文档,联系QQ:2885784924

ngx-push模块详解.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ngx-push模块详解

ngx-push-stream模块源码学习(一)——序言一、概述??? 与传统的request-response的web应用模式不同,comet是一种长连接(long-held)的应用模式,从而允许服务端主动向客户端推送数据。 ??? 主流的comet技术主要有以下两个分支: 分类描述streaming客户端和服务器端保持一种长连接long polling客户端与服务器端建立连接后,以轮询方式等待服务器端数据或事件。收到服务端数据或连接超时后,断开连接并迅速再次建立连接??? ngx-push-stream模块是ngx的一个第三方扩展模块,可以同时支持stream和long polling两种comet技术,基于该模块可以较容易使用nginx server push。 ??? 二、模型??? 一种典型的模型如图所示: ??? 基于ngx+ngx-push-stream模块可以实现在nginx服务器上扩展出两类终端:一种用于发布,一种用于订阅。订阅者以stream或long polling的方式向nginx channel请求数据;同时,发布者可可将信息以post的方式发送到nginx channel。ngx-push-stream模块则完成二者之间的信息缓存和中转。 三、总体流程??? 简单来讲,整个发布订阅过程完成两项工作: 向服务器推送MSG,服务端暂存MSG 服务器端向订阅者推送MSG ??? 为了完成上面两项工作,通道(channel)应运而生。它是发布者和订阅者之间的桥梁。发布者将MSG以post的形式发送到某个通道上,订阅者则以GET的方式从channle获取MSG。由此channel的重要性可见一斑。 ???? 通道的发布者一侧,支持http POST(发布信息)、DELETE(删除channel)和GET(获取channel信息)三种请求;订阅者一侧则只接受GET请求以获取必威体育精装版MSG。具体来讲,发布者一侧主要完成以下三种功能: 获取channle信息 ??? 订阅者数目、缓存信息数目、已发送信息数目等等。。 删除channel ??? 清空缓存的信息、通知所有的订阅者、释放channel 发布信息 ??? 将信息发布到channel上,并向订阅者中转 nginx-push-stream模块源码学习(二)——模块初始化?本文重点介绍push stream模块的构成,至于nginx如何启动、维护该模块不会详细阐述,以后有时间会做详细阐述。?一、模块定义?1.1.? 模块配置???????? 通用nginx模块的配置struct有三种,分别是main,server和location。本模块会涉及到main和location两个域的配置。名称分别为:ngx_http_push_stream_main_conf_t和ngx_http_push_stream_loc_conf_t.???????? 具体模块配置请参考nginx官网:/HttpPushStreamModule?1.2.? 模块指令?? 模块的指令是定义在一个叫做ngx_command_t的静态数组中的,或用于在nginx配置文件中设定模块的相关参数或处理相应请求,先简单来说下ngx_command_t的定义:?C代码??struct?ngx_command_t?{??????ngx_str_t?????????????name;//指令名称??????ngx_uint_t????????????type;//指令类型——该指令可用于ngx?conf的哪个域——main?server?location???????/*命令所对应的处理函数指针,参数???????????@指向结构体?ngx_conf_t?的指针,?这个结构体里包含需要传递给指令的参数;???????????@指向结构体?ngx_command_t?的指针;???????????@指向模块自定义配置结构体的指针?????*/??????char???????????????*(*set)(ngx_conf_t?*cf,?ngx_command_t?*cmd,?void?*conf);??????ngx_uint_t????????????conf;//指定参数存储区域(main?server?loc?)??????ngx_uint_t????????????offset;//指定数据保存位置??????void?????????????????*post;//指向模块在读配置的时候需要的一些零碎变量??};??比如:?C代码??{?ngx_string(push_stream_publisher),??????NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS|NGX_CONF_

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档