Nginx的推送模块,实现简单的服务器长连接【nginx-push-stream-module】

如果你的业务是短连接,但是要主动推送某些东西,做成长连接的样子。

例如:

    卡牌游戏,他是弱交互,但是需要一点推送和聊天服务。

    部分商户后台,需要在有订单的时候来个弹窗。

Github:https://github.com/wandenberg/nginx-push-stream-module

介绍是说支持EventSource, WebSocket, Long Polling, 和 Forever Iframe。

这里用WebSocket举例

由于我的机器里面有NGINX,只能再编译一个举例:

wget nginx.org/download/nginx-1.8.0.tar.gz

tar -zxf nginx-1.8.0.tar.gz

apt-get install git

git clone https://github.com/wandenberg/nginx-push-stream-module

编辑配置文件,让他只监控8080

vim nginx-1.8.0/conf/nginx.conf

worker_processes  auto;
events {
    worker_connections  2048;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  30;
    push_stream_max_messages_stored_per_channel 20;
    push_stream_message_ttl 7d;
    push_stream_shared_memory_size 2048M;
    server {
        listen       8080;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /channels-stats {
            push_stream_channels_statistics;
            push_stream_channels_path   $arg_id;
        }
        location /pub {
            push_stream_publisher admin;
            push_stream_store_messages on;
            push_stream_channels_path   $arg_id;
        }
        location ~/sub/(.*) {
            push_stream_subscriber;
            push_stream_channels_path   $1;
        }
        
        location ~ /ws/(.*) {
            push_stream_subscriber websocket;
            push_stream_channels_path                   $1;
            push_stream_message_template                "~text~";
            push_stream_websocket_allow_publish         off;
            push_stream_ping_message_interval           10s;
        }        
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

此处的配置参考了 baseconfig,以及websocket配置(点我

cd nginx-1.8.0

./configure --add-module=./../nginx-push-stream-module

make

make install

这时候推送服务器已经架设完毕了

你的推送服务器http请求就是 

http://你的ip:8080

你的推送服务器ws监控就是

ws://你的ip:8080

官方举例说,你给pub推送消息的时候,你的ws也会收到,我们测试一下

首先我们写一段JS,让他监控我的服务器频道为medusaTest,随便新建个页面吧

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    TestPage
</body>
<script>

    ws = new WebSocket("ws://192.168.1.50:8080/ws/medusaTest/");

    ws.onopen = function(){};
    ws.onmessage = function(evt){
        console.log(evt);
        alert(evt.data);
    };
    ws.onclose = function(evt){};
    ws.onerror = function(evt){};
</script>
</html>

如果想监控多个频道

ws://192.168.1.50:8080/ws/mt/test2/id1to2/...

然后用POST向该频道推送一下数据试一下,我这里用的是POSTMAN,当然你也可以自己写脚本

http://192.168.1.50:8080/pub/?id=medusaTest

简单的使用完成了,具体基本都是业务进行拓展

官方文档介绍的还算详细

从此告别JS轮训和业务上难搞的服务器端长连接

告辞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值