`

利用nginx_push_stream_module实现服务器消息推送

阅读更多

PS:原创文章,如需转载,请注明出处,谢谢!     

本文地址: http://flyer0126.iteye.com/blog/1886149

 

       前段时间由于项目需要,关注了一下服务器消息推送,本人主要实现的是利用nginx push实现的服务器消息推送机制,在此总结整理一下。

一、服务器推技术

       Comet 基于 HTTP长连接的“服务器推”技术,是一种新的 Web 应用架构。基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求。Comet 架构非常适合事件驱动的 Web 应用,以及对交互性和实时性要求很强的应用,如股票交易行情分析、聊天室和 Web 版在线游戏等。

 

       其实有很多种方式实现服务器推送,它们各有各的优缺点:

    1. 传统轮询:

        此方法是利用 HTML 里面 meta 标签的刷新功能,在一定时间间隔后进行页面的转载,以此循环往复。它的最大缺点就是页面刷性给人带来的体验很差,而且服务器的压力也会比较大。

    2. Ajax 轮询:

        异步响应机制,即通过不间断的客户端 Ajax 请求,去发现服务端的变化。这种方式由于是客户端主动连接的,所以会有一定程度的延时,并且服务器的压力也不小。

    3. 长连接:

        这也是我们之前所介绍的一种方式。由于它是利用客户端的现有连接实现服务器主动向客户端推送信息,所以延时的情况很少,并且由于服务端的可操控性使得服务器的压力也迅速减小。其实这种技术还有其他的实现方式,通过 Iframe,在页面上嵌入一个隐藏帧(Iframe),将其“src”属性指向一个长连接的请求,这样一来,服务端就能够源源不断的向客户端发送数据。这种方式的不足就在于:它会造成浏览器的进度栏一直显示没有加载完成。

    4. 套接字:

        可以利用 Flash 的 XMLSocket 类或者 Java 的 Applet 来建立 Socket 连接,实现全双工的服务器推送,然后通过 Flash 或者 Applet 与 JavaScript 通信的接口来实现最终的数据推送。但是这种方式需要 Flash 或者 JVM 的支持,同样不太合适于终端用户。

    5. HTML5 的 WebSocket:

        这种方式其实与套接字一样,但是这里需要单独强调一下:它是不需要用户而外安装任何插件的。HTML5 提供了一个 WebSocket 的 JavaScript 接口,可以直接与服务端建立 Socket 连接,实现全双工通信,这种方式的服务器推送就是完全意义上的服务器推送了,没有半点模拟的成分,只是现阶段支持 HTML5 的浏览器并不多,而且一般老版本的各种浏览器基本都不支持。

 

        本文主要介绍利用 nginx-push-stream-module 实现基于AJAX的长轮询(long-polling)方式的服务器消息推送。

 

二、安装

        需要将nginx-push-stream-module以nginx的模块方式编译安装,详细的不再赘述,关于细节,可以查看官网http://wiki.nginx.org/HttpPushStreamModule

 

三、基本配置

        以下主要针对nginx的server config。

    1. 发布通道,向指定的通道发送发送消息,配置如下:

location /pub {
        # activate publisher (admin) mode for this location
        push_stream_publisher admin;

        # query string based channel id
        set $push_stream_channel_id             $arg_id;
}

     2. 订阅通道,服务器收到订阅请求,并设定消息模板及连接时间,配置如下:

location ~ /lp/(.*) {
        # activate long-polling mode for this location
        push_stream_subscriber      long-polling;

        # positional channel path
        set $push_stream_channels_path    $1;

        # message template
        push_stream_message_template        "{\"id\":~id~,\"channel\":\"~channel~\",\"text\":\"~text~\"}";

        # connection timeout
        push_stream_longpolling_connection_ttl        30s;
}

         配置好并重启nginx之后就可以开始使用Push Stream Module了。

 

四、简单应用

    1. 在终端 A 中订阅通道 ch1:

curl http://comet.flyer0126.com/lp/my_ch1

    2. 在终端 B 中向该通道 ch1 发送消息:

curl http://comet.flyer0126.com/pub?id=ch1 -d "Some Text"

    3. 在终端 A 中收到json格式的返回数据:{"id":1,"channel":"ch1","text":"Some Text"}

 

    具体在web中应用思路即:

        浏览器发送请求[Client] —> 监听数据 —> 收到数据 —> 分析状态 —> 页面显示 —> 重新发送链接(若未接收到数据相应,达到设定时长后中断当前连接,重新发起新连接)

 

    最后,附本人应用服务器消息推送实现图例(仅供参考):

 

  • 大小: 11.3 KB
1
0
分享到:
评论

相关推荐

    nginx_http_push_module

    Nginx_http_push_module是一个针对Nginx服务器的扩展模块,主要用于实现HTTP服务器推送技术。HTTP服务器推送是HTTP/2协议中的一个重要特性,允许服务器未经请求主动向客户端发送数据,提升了实时性,广泛应用于直播...

    Nginx_Rtmp_Module_Master

    2. **重定向**:可以设置 `push` 或 `pull` 将流推送到其他 RTMP 服务器,实现多服务器分发。 3. ** HLS 转码**:Nginx RTMP 模块可以配合其他工具(如 ffmpeg)实现实时转码为 HLS,以支持更多设备的播放。 总的来...

    推流 拉流 视频聊天 rtmp协议传输 (nginx_Gryphon服务器端)

    推流(Push Stream)是指内容生成者(如主播或视频源)将视频数据推送到服务器的过程。这个过程中,主播的设备会作为推流客户端,使用特定的推流软件或SDK,如FFmpeg或Android SDK,将录制的视频通过RTMP协议发送到...

    nginx-push-stream-module:用于您的Nginx设置的纯流http推送技术。 彗星变得简单且真正可扩展

    用于您的Nginx设置的纯流http推送技术。 变得简单,真正可扩展。 支持 , ,Long Polling和Forever Iframe。 看下面的。 该模块不随Nginx源一起分发。 请参阅。 在github上的上可用 变更日志 始终查看以了解新...

    海康威视摄像头RTSP使用nginx推流到服务器直播教程

    通过这个教程,你应该能够成功地将海康威视摄像头的视频流通过RTSP推送到nginx服务器,并实现直播。实际操作中,可能还会遇到网络环境、权限设置等问题,但只要遵循上述步骤并根据实际情况调整,你就能构建出自己的...

    nginx-rtmp-module

    Nginx-RTMP-Module 是由 Lavf57 开发的一个开源项目,其核心功能是添加对 RTMP 协议的支持,使得 Nginx 可以作为 RTMP 服务器接收来自编码器的音视频流,同时也可以将这些流推送到其他 RTMP 服务器或直接分发给...

    nginx-rtmp_Http_FLV.rar

    RTMP是Adobe Systems开发的实时消息传输协议,常用于在线直播系统,允许服务器将音视频数据实时推送到客户端。主播端使用支持RTMP协议的软件(如OBS Studio)将视频流推送到服务器,服务器接收后,再将流分发给订阅...

    nginx推流的配置

    开发者可以通过JavaCV将本地视频流推送到Nginx的RTMP服务器。以下是一个简单的JavaCV推流示例: ```java import org.bytedeco.javacpp.Loader; import org.bytedeco.javacv.FFmpegFrameGrabber; import org....

    nginx搭建rtmp协议流媒体服务器

    例如,使用FFmpeg推送一个本地视频流到Nginx: ```bash ffmpeg -i input.mp4 -c copy -f flv rtmp://localhost/live/my-stream ``` 这里,`live`是之前配置中的应用程序名,`my-stream`是自定义的流名称。 **观看...

    nginx-http-flv-module2-1.19.3(windows-支持flv.js)

    这个模块允许你将 RTMP(Real-Time Messaging Protocol)流推送到 Nginx 服务器,并通过 HTTP 协议分发,使得用户能够通过网页上的 flv.js 播放器或其他支持 FLV 的播放器进行播放。标题中的 "nginx-...

    nginx-rtmp1.17.9.rar

    - 推流(Push):使用 ffmpeg 或其他工具将本地音视频源推送到 Nginx RTMP 服务器。 ``` ffmpeg -i input.mp4 -c copy -f flv rtmp://your-server/live/stream-name ``` - 拉流(Pull):客户端(如网页、移动...

    nginx-rtmp搭建rtmp流媒体服务

    使用ffmpeg工具将大华摄像头的视频流推送到nginx-rtmp服务器。首先,确保摄像头的视频流可通过网络访问,例如通过HTTP或RTSP协议。然后,运行以下ffmpeg命令: ```bash ffmpeg -i ...

    Nginx RTMP For Windows

    4. **测试服务器**:使用FFmpeg或其他推流工具向服务器推送测试流,验证服务器是否正常工作。 5. **设置播放URL**:观众可以通过RTMP播放器或嵌入HTML5的Video标签来观看直播。播放URL通常是`rtmp://your-server-...

    nginx使用nginx-rtmp-module模块实现直播间功能

    总的来说,通过`nginx`和`nginx-rtmp-module`,你可以构建一个功能完善的直播服务器,同时利用`m3u8`格式实现跨平台的H5直播。但要注意,不同平台和浏览器的兼容性问题,可能需要进行额外的适配和测试工作。

    rtmp+ngix推流.7z

    例如,如果你有一个名为`input.mp4`的视频文件,你可以使用以下命令推送到Nginx的RTMP服务器: ``` ffmpeg -i input.mp4 -c copy -f flv rtmp://localhost/live/stream_key ``` 其中,`stream_key`是你在Nginx...

    RTMP 服务器构建

    RTMP是一种专为低延迟实时数据交换设计的协议,通常用于从服务器向客户端推送音频、视频和控制消息。它由Adobe Systems开发,最初用于Flash Player,尽管现在Flash已不再流行,但RTMP协议仍然在许多直播应用中被广泛...

Global site tag (gtag.js) - Google Analytics