成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

WebSocket實時消息推送

coolpail / 3423人閱讀

摘要:軟件運行原理協(xié)議是一種全雙工的通訊方式并且支持跨域二消息推送服務(wù)器的搭建我們利用的模塊來實現(xiàn)消息推送服務(wù)。

一、消息推送的實現(xiàn)原理與方式 1.1 實時性較強的場景

在線聊天

監(jiān)控報警

視頻彈幕

1.2 基于HTTP的實時消息方案

AJAX輪詢(polling) //客戶端不斷發(fā)送請求到服務(wù)器

長輪詢(longplling) //一般30s超時

異步streaing

iframe數(shù)據(jù)量

全雙工數(shù)據(jù)發(fā)送和接收可以同時進行

HTTP協(xié)議是不具備全雙工的。

1.3 軟件運行原理

WebSocket協(xié)議是一種全雙工的通訊方式,并且支持跨域

二、消息推送服務(wù)器的搭建

我們利用nginxnginx-push-stream-module模塊來實現(xiàn)消息推送服務(wù)。

2.1 環(huán)境搭建

首先需要下載模塊源碼,這里在git上直接克隆

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

將欲增加的模塊路徑定義為一個變量(此步驟非必要步驟,且定義的變量只能當前會話可用,只是為了后續(xù)操作方便)

NGINX_PUSH_STREAM_MODULE_PATH=$PWD/nginx-push-stream-module

以下是nginx已經(jīng)安裝過的情況下增加模塊,因為以前nginx安裝在/usr/local/nginx目錄下,所以下面的操作都是以此目錄為路徑進行操作,如果安裝到其他目錄有些命令需要做對應(yīng)的更改。

先查看原有nginx的配置參數(shù)并拷貝出來備用

/usr/local/nginx/sbin/nginx -V

解壓相同版本nginx源碼包(以前安裝時的源碼包),如果已經(jīng)刪除了課重新下載,版本相同即可(這里以1.12.1版本為例)
nginx官網(wǎng)

wget  http://nginx.org/download/nginx-1.12.1.tar.gz

tar zxvf nginx-1.12.2.tar.gz
進入nginx的目錄

cd nginx-1.12.1

進行配置(其中***是前面記錄的nginx原始的配置,也就是剛才拷貝出來配置,這個務(wù)必加上)

./configure --add-module=$NGINX_PUSH_STREAM_MODULE_PATH ***

編譯:

make

不要執(zhí)行make install避免覆蓋,備份原來的nginx可執(zhí)行文件

備份:

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak

將編譯好的nginx復(fù)制到原始nginxsbin目錄

cp objs/nginx /usr/local/nginx/sbin/

到此為止已經(jīng)安裝完畢,可以再執(zhí)行/usr/local/nginx/sbin/nginx -V查看一下nginx的模塊情況。

2.3 nginx配置

安裝后需要在nginx的配置文件nginx.conf或者其他包含的配置文件中做如下配置:
1. 在http段加入:

#最大共享內(nèi)存
push_stream_shared_memory_size                100m;
#頻道最大長度
push_stream_max_channel_id_length             200;
#每個頻道緩存的最大消息數(shù)量
push_stream_max_messages_stored_per_channel   20;
#消息生命周期(分鐘)
push_stream_message_ttl                       5m;

2. 添加一個虛擬主機(server)配置如下:

server {
    listen 8080;
    server_name     127.0.0.1;
    location /pub {
        push_stream_publisher admin;
        push_stream_channels_path $arg_id;
        push_stream_store_messages on;
    }
    location ~ /sub/(.*) {
        push_stream_subscriber;
        push_stream_channels_path $1;
        push_stream_last_received_message_time      "$arg_time";
        push_stream_last_received_message_tag       "$arg_tag";
        push_stream_header_template "






";
            push_stream_message_template "";
        push_stream_footer_template "";
        default_type "text/html; charset=utf-8";
        push_stream_ping_message_interval 10s;
    }
    location ~ /ev/(.*) {
        push_stream_subscriber eventsource;
        push_stream_channels_path $1;
        push_stream_last_received_message_time      "$arg_time";
        push_stream_last_received_message_tag       "$arg_tag";
        push_stream_message_template "{"id":~id~,"channel":"~channel~","text":"~text~","tag":"~tag~","time":"~time~"}";
        push_stream_ping_message_interval 10s;
    }
    location ~ /ws/(.*) {
        push_stream_subscriber websocket;
        push_stream_channels_path $1;
        push_stream_last_received_message_time      "$arg_time";
        push_stream_last_received_message_tag       "$arg_tag";
        push_stream_message_template "{"id":~id~,"channel":"~channel~","text":"~text~","tag":"~tag~","time":"~time~"}";
        push_stream_ping_message_interval 10s;
    }
    location ~ /lp/(.*) {
        push_stream_subscriber long-polling;
        push_stream_channels_path $1;
        push_stream_last_received_message_time      "$arg_time";
        push_stream_last_received_message_tag       "$arg_tag";
        push_stream_message_template "{"id":~id~,"channel":"~channel~","text":"~text~","tag":"~tag~","time":"~time~"}";
        push_stream_longpolling_connection_ttl 30s;
    }

  }

3. 然后重新載入nginx的配置

檢查配置文件是否有語法錯誤:

/usr/local/nginx/sbin/nginx -t

出現(xiàn)以下提示表示正確:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重新載入:

/usr/local/nginx/sbin/nginx -s reload 或 nginx -s reload 

查看端口:netstat -tnl

2.3 測試訂閱/發(fā)布

Linux命令下使用curl做如下測試(其中ch1代表頻道)

#發(fā)布信息:
curl http://localhost:8080/pub?id=ch1 -d "發(fā)布消息測試"
#訂閱信息:
curl http://localhost:8080/lp/ch1

參考學(xué)習(xí)視頻:消息推送服務(wù)器構(gòu)建實時聊天室視頻教程

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39804.html

相關(guān)文章

  • Web 實時推送技術(shù)的總結(jié)

    摘要:本文對過去和現(xiàn)在流行的實時推送技術(shù)進行了比較與總結(jié)。以上我們介紹了三種實時推送技術(shù),然而各自的缺點很明顯,使用起來并不理想,接下來我們著重介紹另一種技術(shù)它是比較理想的雙向通信技術(shù)。 前言 隨著 Web 的發(fā)展,用戶對于 Web 的實時推送要求也越來越高 ,比如,工業(yè)運行監(jiān)控、Web 在線通訊、即時報價系統(tǒng)、在線游戲等,都需要將后臺發(fā)生的變化主動地、實時地傳送到瀏覽器端,而不需要用戶手動...

    Rocture 評論0 收藏0
  • WebSocket 前后端實時消息推送

    摘要:要做一個通信監(jiān)測方面的事情,需要實時進行前后端的的消息推送,這里不分析輪詢和的區(qū)別,網(wǎng)上講的挺多的,下圖是兩者的通信示意圖,這里只寫怎么用。 要做一個通信監(jiān)測方面的事情,需要實時進行前后端的的消息推送,這里不分析Ajax輪詢和WebSocket的區(qū)別,網(wǎng)上講的挺多的,下圖是兩者的通信示意圖,這里只寫怎么用。showImg(https://segmentfault.com/img/rem...

    lindroid 評論0 收藏0
  • WebSocket 前后端實時消息推送

    摘要:要做一個通信監(jiān)測方面的事情,需要實時進行前后端的的消息推送,這里不分析輪詢和的區(qū)別,網(wǎng)上講的挺多的,下圖是兩者的通信示意圖,這里只寫怎么用。 要做一個通信監(jiān)測方面的事情,需要實時進行前后端的的消息推送,這里不分析Ajax輪詢和WebSocket的區(qū)別,網(wǎng)上講的挺多的,下圖是兩者的通信示意圖,這里只寫怎么用。showImg(https://segmentfault.com/img/rem...

    khs1994 評論0 收藏0
  • 利用 socket.io 實現(xiàn)消息實時推送

    摘要:為了達到這種雙向的實時消息傳遞,很明顯地考慮用來實現(xiàn)。注意這個文件并不能用在實際的項目中,只是用來顯示消息推送的效果而已。參考資料本文在我博客上的原地址利用實現(xiàn)消息實時推送 項目背景介紹 最近在寫的項目中存在著社交模塊,需要實現(xiàn)這樣的一個功能:當發(fā)生了用戶被點贊、評論、關(guān)注等操作時,需要由服務(wù)器向用戶實時地推送一條消息。最終完成的項目地址為:socket-message-push,這里...

    RobinQu 評論0 收藏0
  • 基于node+socket.io+redis的多房間多進程聊天室

    摘要:并且指定收到消息,以及端口的監(jiān)聽方法。四代碼示例多房間實時聊天室配置版本須在里配置定義,并設(shè)置。使同一個的請求能夠落在同一個機器同一個進程中。通過主進程統(tǒng)一管理維護子進程,每個進程監(jiān)聽一個端口。 showImg(http://7tszky.com1.z0.glb.clouddn.com/FkhApdRySR927nkdDZuUPBQbJtXG); 一、相關(guān)技術(shù)介紹: 消息實時推送,指的...

    Guakin_Huang 評論0 收藏0

發(fā)表評論

0條評論

coolpail

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<