nginx_http_push_module模块使用详解

[问题已处理]-harbor开启https解决nginx转发后无法push的问题 harbor开启https 阅读详情

关于

nginx_http_push_module模块致力成为一个成熟的http推送和comet服务,它能够处理好全部链接,并且仅通过http请求,可以完成广播消息到所有客户端,这让你写异步web应用程序时得心应手,并且在代码中完全不必理会延时请求。该模块完整的实现了Basic HTTP Push Relay Protocol

 

为什么选择此模块

当你要写一个实时更新的模块时,例如某些聊天室、多人在线flash游戏等。无论哪种方式,我们都要避免更新请求时刷新页面或者每隔几秒轮训服务器,这样的代码丑陋无比(也许是我翻译错误)。
 

如何使用 

你可以下载模块代码、安装模块、编写nginx的conf文件,通过几行的javascript,你就可以实现一个用户客户端。只需要通过http请求,你也可以发送实时消息给长轮训用户。
 
下载:
 
http://pushmodule.slact.net/downloads/nginx_http_push_module-0.692.tar.gz
如果需要跟更新版本,或者链接不可用,可访问官方地址http://pushmodule.slact.net
 
安装(包括安装了一些其它模块并不是必须的):
./configure --prefix=/usr/local/nginx     \
  --with-debug                            \
  --with-http_stub_status_module          \
  --with-http_ssl_module                  \
  --with-http_realip_module               \
  --with-http_image_filter_module         \
  --with-pcre=../pcre-8.21                \
  --add-module=../ngx_devel_kit-0.2.19    \
  --add-module=../lua-nginx-module-0.9.8  \
  --add-module=../echo-nginx-module       \
  --add-module=../redis2-nginx-module     \
  --add-module=../set-misc-nginx-module   \
  --add-module=../nginx_http_push_module-0.692
make
make install
我使用的nginx版本为nginx-1.7.2,官方要求最低版本为0.7,0.6和0.5版本都不支持。

编写简单nginx配置文件查看模块如何使用:

1.打开nginx配置文件,写入如下代码:
...


location /pub {   
    set $push_channel_id $arg_id;   
    push_publisher;   
    push_store_messages on;   
    push_message_timeout 2h;   
    push_max_message_buffer_length 10;   
}   
location /sub {   
    push_subscriber;   
    set $push_channel_id $arg_id;   
    push_subscriber_concurrency broadcast;   
    default_type text/plain;   
}  


...

2.重启nginx
./nginx –s stop
./nginx


3.消息订阅
#curl --get http://172.16.18.114/sub?id=jfy
参数id=jfy即为push_channel_id
测试可以看到处于等待状态。
           
4.消息发布
#curl -d "nginx_http_push_module" http://172.16.18.114/pub?id=jfy
这里的id=jfy,与上面sub的相同
发布后,上面的sub会返回消息


配置信息详解

变量:
    $push_channel_id
    作为唯一标识,区别通信通道,要通信的pub和sub这个值必须相同。
    例如:
    set $push_channel_id $arg_id; 
    #channel id 就是当前url上的字符串变量"id"
    #(/pub?id=channel_id_string)


指令:

  Publisher / Subscriber
  
    push_subscriber[ long-poll | interval-poll ]
    默认值:long-poll
    位置:server,location

    定义一个server或者location作为subscriber,这个代表一个sub与信息管道进行通信,通过请求头headers中设置If-Modified-Since和If-None-Match自动遍历列表,处理队列中保留时间最长的消息或是即将到来的新消息。具体可以参考protocol documentation。

    当有sub请求数据并且数据未到达时,sub端长轮训请求。如果是interval-poll方式,则会返回304码,返回最近接受的数据。
    
    If-None-Match和If-Modified-Since说明:

    pub消息时,消息会带一个唯一的时间戳message_time,如果同一时间内同时pub多条信息,则会启用消息的message_tag属性值从0开始递增,否则message_tag=0;

    sub消息后队列中的数据并不删除

    sub消息返回的结果中,http header中有:
      Last-Modified: Thu, 21 Aug 2014 05:44:47 GMT    即为message_time

      Etag: 0                                         即为message_tag

    sub会从http的headers中取If-None-Match作为上次获取到的消息的tag, If-Modified-Since作为上次获取到的消息的time

    sub从后往前遍历队列,先比较这条消息的message_time与header中的time,如果这两个相同则再比较tag,来决定获取现有的哪一条消息或是等待将来的消息

    如果sub的header中没有If-None-Match和If-Modified-Since,则当0处理,那就是将永远一直获取最旧的一条消息
    正确的用法是:
      当次sub请求中headers,If-None-Match赋值为上次sub返回headers中的Etag值
      当次sub请求中headers,If-Modified-Since赋值为上次sub返回headers中的Last-Modified值
    
    push_subscriber_concurrency[ last | first | broadcast ]
    默认值:broadcast
    使用环境:http,server,location
    多用户请求时的控制处理,工作方式:
    broadcast:广播形式接受,所有当前连接的用户请求被保存;
    last:最近的用户请求被保存,其他用户全部409冲突;
    first:最开始的用户请求被保存,其他全部409冲突;
 
    push_publisher
    默认值:none
    使用环境:server,location
    定义一个server或者location作为publisher,发给publisher的http请求被视为发送给subscribers的数据。
 

信息存储:  
    push_store_messages[ on | off ]
    默认值:on
    使用环境:http,server,location

    当使用off时,仅表示push_message_buffer_length 0;

    当使用off时,pub消息时若没有sub则消息会被丢弃

 
    push_max_reserved_memory[ size ]
    默认值:16M
    使用环境:http
    这个模块的内存块大小将会用于信息队列和信息缓存。
 
    push_min_message_buffer_length[number ]
    默认值:1
    使用环境:http,server,location
    每个channel的最小信息存储。
 
    push_max_message_buffer_length[number ]
    默认值:10
    使用环境:http,server,location
    每个channel的最大信息存储数。
 
    push_message_buffer_length[ on |off ]
    默认值:off
    使用环境:http,server,location
    每个channel存储的确切信息数
 
    push_delete_oldest_received_message[off ]
    默认值:0
    使用环境:http,server,location
    当启动时,一旦channel中最老的数据被用户接受后,它将被删除。所有超过push_max_message_buffer_length的信息将会在channel的信息缓存中。原作者建议避免使用改指令,因为它违背了用户get请求的幂等原则。
 
    push_message_timeout[ time ]
    默认值:1h
    使用环境:http,server,location
    作为消息在对立当中的过期时间,如果你不希望消息有过期时间,可以设置为0.
 

安全    
    push_authorized_channels_only[ on| off ]
    默认值:off
    使用环境:http,server,location
    subscriber是否可以通过请求来创建一个channel。如果设置on,publisher必须在subscriber请求数据前,发送一个post或者put请求。否则所有的subscriber请求不存在的channels时,将会得到403码。
 
    push_channel_group[ string ]
    默认值:none
    使用环境:server,location
    作为一种约束,适用于发给指定channel,而其他channel将永远不会收到。就好像是channel id的前缀字符串。
 
    push_max_channel_id_length[ number]
    默认值:512
    使用环境:main,server,location
    设置最大的channel id长度,长的部分将会被截断

    push_max_channel_subscribers[number ]
    默认值:0(unlimited)
    使用环境:main,server,location
    最大并发subscriber数,你懂得!!!!
CentOS 8 安装视频网站与流媒体直播Nginx-http-flv-module模块 安装CentOS 本次测试安装使用的是CentOS 8.2版。 具体安装办法最自行百度。 安装宝塔面板 宝塔面板是一个非常不错的管理面板,可以方便我们对Linux系统的管理。 宝塔面板官网:https://www.bt.cn/ CentOS安装面板命令是: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh . 阅读详情

相关推荐

单细胞数据pseudobulks差异分析实战:从聚合到DESeq2

本文详细介绍了单细胞转录组数据分析中pseudobulks(伪散装)方法的实战流程。通过将同一样本的同类型细胞表达值聚合,模拟Bulk RNA-seq数据,再利用DESeq2进行稳健的差异基因分析。该方法有效降低了单细胞数据的技术噪音,特别适用于样本量有限但追求结果稳定性的研究场景,并提供了完整的R代码实现与结果解读指南。

sea99的博客 759

nginx模块学习——nginx_http_push_module模块深入讲解和聊天室实现

关于: nginx_http_push_module模块致力成为一个成熟的http推送和comet服务,它能够处理好全部链接,并且仅通过http请求,可以完成广播消息到所有客户端,这让你写异步web应用程序时得心应手,并且在代码中完全不必理会延时请求。 本文为翻译文章,有部分原创转载请注明地址:http://blog.youkuaiyun.com/lengzijian/article/detail...

数据库天地 299

2023-11-20 MySQL ARM64 银河麒麟

背景 MySQL是常用数据库,Windows安装比较容易,笔者也有记录。现在国产化系统银河麒麟中安装,不同的是软件安装包不容易下载。一是安装的方式,再一个是MySQL本身的版本,网上很多文档说明其实都是对的,但是为什么那么多都不一样呢?就是MySQL本身的版本差异比较大,这些差异笔者也不是很清楚,但是不要用8和5.7的差异非常大,8即使安装的很顺利,在使用过程也会很多坑,导致我宁愿卸载8,也要重新...

jxmh1991@163.com 808

Nginx rtmp 转推push和relay(pull)

push,pull config:Nginx-rtmp模块实现流媒体play、push、pull功能_莫失莫忘的博客-优快云博客 config: 启用push功能,将本机(172.16.6.36)/mypush,app中的数据流推送至172.16.6.39服务器下的/myapp app中 application mypush { live on; push rtmp://172.16.6.39:1935/myapp; } 配置实现pull功能,172.16.6.39服务器能够从1...

fdsafwagdagadg6576的专栏 2678

量化交易新手必看:如何用Python快速接入XTP极速交易系统(附避坑指南)

本文为量化交易新手提供了使用Python快速接入中泰证券XTP极速交易系统的完整指南。文章详细介绍了XTP系统的微秒级性能优势、与CTP系统的核心区别,并逐步讲解了环境配置、API连接、资金查询、下单撤单等关键步骤,同时分享了网络维护、订单处理等实战避坑技巧,帮助开发者高效对接专业交易柜台。

life6的博客 659

手把手教你搞定EMC EFT测试:从电源线到信号线的完整整改实战(附常见失败原因)

本文详细解析了EMC EFT测试中的常见问题及整改措施,从电源线到信号线的完整实战方案。通过四步定位法和成本最优整改策略,帮助工程师有效应对电快速脉冲群干扰,提升产品通过率并降低成本。

weixin_30920597的博客 497

Nginx服务器 nginx http push module模块

Nginx服务器 nginx http push module模块=关于httppushmodule=nginx_http_push_module模块致力成为一个成熟的http推送和comet服务,它能够处理好全部链接,并且仅通过http请求,可以完成广播消息到所有客户端,这让你写异步web应用程序时得心应手,并且在代码中完全不必理会延时请求。模块安装[编辑...

weixin_33843409的博客 238

【YOLO目标检测全栈实战】98 YOLO模型在低光照环境下的自适应增强策略

你有没有遇到过这种情况?深夜加班调试产线检测模型,车间灯光昏暗,摄像头采集的图片黑乎乎一片,YOLO模型直接“罢工”——漏检率飙升到40%以上。上个月我在一个汽车零部件质检项目里就栽了跟头:白天模型跑得飞起,mAP@0.5达到0.92,可一到夜班,同样的产线、同样的零件,mAP直接掉到0.63。客户拍着桌子问我:“你这模型怎么还分白天黑夜?”

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 284

Mobile Next Mobile MCP安全最佳实践:设备权限管理与数据保护

Mobile Next Mobile MCP(Model Context Protocol)作为一款面向iOS和Android平台的移动自动化与数据采集工具,在提供强大设备控制能力的同时,也需要严格的安全机制来保护设备与数据安全。本文将从设备权限精细化管理、数据全生命周期保护、安全审计与监控三个维度,为开发者和运维人员提供一套完整的安全实践指南。 [![Mobile MCP移动自动化安全架构图]

gitblog_00008的博客 1170

SAP FICO资产明细表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO资产明细表开发说明书(包括源代码,测试样例及FS)

我好像病了的博客 1467

【BlueDroid】【PBAP】蓝牙电话本协议之同步通讯录分析(超详细)

Header - Type = "x-bt/vcard-listing":代表了该Request对应的Function为PullvCardListing;Profile:PBAP (4),上层应用层协议为PBAP,OBEX协议的上层应用层协议除了PBAP,还有OPP、MAP协议;Response in Frame:该request frame-485对应的Response frame为489;在PBAP协议同步通讯录和通讯记录中,都是基于OBEX协议实现的,PBAP协议作为了应用层协议;

风云说通信 2069

使用NGiNX_HTTP_Push_Module实现简单的服务器推送

<br />NGINX_HTTP_Push_Module是一个Nginx服务器模块,可以实现服务器端的长连接和推送(但是推送一次后会结束进程,尚未实现持续的推送)。<br />http://pushmodule.slact.net可以下载该模块。<br />如果已安装Nginx,需要重新编译安装Nginx,要用命令"./configure --add-module=/home/hfahe/ngnix_http_push_module"来配置,然后执行make和make install来安装Nginx。<br

蒋宇捷的专栏 6538

【OpenClaw从入门到精通】第02篇:5分钟速通!阿里云/华为云一键部署OpenClaw(附避坑指南·2026实测版)

本文聚焦OpenClaw的云端部署场景,针对本地部署“关机即离线、跨设备访问难”的痛点,详解阿里云(主推)和华为云(备选)的一键部署流程。2026实测验证:阿里云轻量应用服务器通过官方OpenClaw镜像可5分钟完成部署,华为云Flexus L实例需补充SSH配置步骤;文中拆解云端部署核心概念(地域选择、端口放行、成本构成),通过“AI助理定时抓取行业资讯并推送钉钉”的虚拟案例演示云端7×24小时运行价值,同时提供模型调用、服务器成本的精细化控制方案,梳理端口访问失败、API-Key权限异常等高频坑点的解决

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 5542

基于nginx-rtmp-module模块实现的HTTP-FLV直播模块nginx-http-flv-module(三)

接上一篇《基于nginx-rtmp-module模块实现的HTTP-FLV直播模块nginx-http-flv-module(二)》内容。 项目地址:https://github.com/winshining/nginx-http-flv-module,欢迎大家下载测试,返回bug和提交PR。 2018-10-28:现在nginx-htt-flv-module还...

winshining的专栏 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

基于nginx-rtmp-module模块实现的HTTP-FLV直播模块nginx-http-flv-module(一)

本文后续的内容将在这里更新:《基于nginx-rtmp-module模块实现的HTTP-FLV直播模块nginx-http-flv-module(二)》。注意:下文的配置很多已经不能用了,因为现在的实现跟早期的实现相差有点大。而为了看到整个项目的变迁史,所以保留了下来,下文的更新中提到了为什么有些配置项不能再使用的原因。现在使用的配置可查找下文中的README.CN.md。另外,除非你...

winshining的专栏 6万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

nginx +rtmp+nginx-http-flv-module 环境搭建

nginx +rtmp+nginx-http-flv-module 环境搭建 注:因为RTMP,HLS 都会存在这样那样的缺点,为了更好的解决延时问题、拉流兼容性问题,所以我们准备用flv.js 进行拉流。 1、下载nginx包 下载地址:https://nginx.org/download/nginx-1.14.2.tar.gz 2、下载nginx-http-flv-module 模块包 下载地...

caowenjing123的博客 2万+

Nginx + FastCgi/ php5-fpm + nginx_http_push_module安装

Nginx + FastCgi/ php5-fpm + nginx_http_push_module安装   一.   Nginx和nginx_http_push_module模块安装及部署: 1.       到http://nginx.org/en/download

IRIDESCENT_彩虹光芒 1038

nginx ngx_http_module(10) 指令详解

nginx http module 指令详解

as34233的博客 968

实现服务器推送消息nginx,基于nginx_HTTP_Push_Module的服务器推送技术实战

“服务器推送”很久很久以前就注意到这个名词了,无奈技术不行,没有怎么去研究它,又加上自己是搞PHP的,看到java的DWR框架也实现了诸如服务器推送的功能,看了代码是无比的吃力,最后还是使用谷歌搜了一下有关服务器推送的资料,一个国外的牛人也写了一个采用nginx来实现服务器推送的模块“”。官方上面就有例子了,你会发现右上角的聊天窗口是在进行的……好,现在我们就来使用这个模块来本地化搭建一个服务器推...

weixin_42346710的博客 596

【Nginx】Nginx中定义自己的HTTP模块

需要定义一个ngx_command_t数组,并设置在出现 mytest 配置后的解析方法由 ngx_http_mytest“担当”。下图为ngx_command_t数组详解。0,NULL},其中,ngx_http_mytest是ngx_command_t结构体中的set 成员,当在某个配置块中出现 mytest 配置项时,Nginx 将会调用ngx_http_mytest方法。如果没有什么是必须在HTTP框架初始化时完成,可以向下面一样进行定义。*** 模块的定义*/NULL,NULL,

weixin_43432215的博客 914

基于nginx_http_push_module模块让nginx变成Comet Server

基于http协议搭建各种服务已经成为一种大势,但是基于http协议的客户端和服务器端的交互却是个难题,没办法http协议天生如此,其是无状态的协议,每次交互建立链接,结束断开. 客户端和服务器交互很简单,请求描述功能接口的url即可,带上参数.可是服务器要和客户端交互,那就有些困难.下面是几种方法. 1.客户端轮询,最差的一种,客服端和服务器端都在白忙活,浪费资源. 2.long-polli

周翔的专栏 3277

项目开发之Nginx_push_stream_module使用

Nginx_push_stream是针对nginx开发的第三方服务器推送模块,可以使用它来搭建服务器端的推送服务

Jackie Wu 3904

php服务模块在nginx中的安装,Nginx和Nginx_http_push_module模块安装和设置方法

一.Nginx和nginx_http_push_module模块安装及部署:1.到http://nginx.org/en/download.html 下载nginx-0.8.53.tar.gz到 http://pushmodule.slact.net/#download 下载nginx_http_push_module模块到 http://www.pcre.org/下载pcre(正则表达式) 函数...

weixin_28696185的博客 235

基于nginx-rtmp-module模块实现的HTTP-FLV直播模块nginx-http-flv-module(二)

由于《基于nginx-rtmp-module模块实现的HTTP-FLV直播模块nginx-http-flv-module(一)》内容已经很长,所以后续的更新将记录在这儿。非常感谢网友们的测试反馈和代码提交!项目地址:https://github.com/winshining/nginx-http-flv-module。有问题或者建议,可以加Q群:711969608详聊。目前已经有很多个...

winshining的专栏 4万+

高性能流媒体服务器nginx-http-live-module

nginx-rtmp-module实现了开创性的工作,但是,实际上它的完成度并不高,缺少的功能和很多缺陷在前面的文章中已有提及。如果要在实际生产环境中使用,必须进行大量的修改。 nginx-http-flv-module部分解决了一些问题,由于我自身有些知识和测试环境所限,有些问题的解决周期很长甚至无法解决。不管怎样,nginx-http-flv-module能成...

winshining的专栏 1万+
上一篇: Basic HTTP Push Relay Protocol
下一篇: STOMP协议说明书-1.2版
笑天居士
博客等级 码龄24年 292粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值