摘要:軟件運行原理協議是一種全雙工的通訊方式并且支持跨域二消息推送服務器的搭建我們利用的模塊來實現消息推送服務。
一、消息推送的實現原理與方式 1.1 實時性較強的場景
在線聊天
監控報警
視頻彈幕
1.2 基于HTTP的實時消息方案AJAX輪詢(polling) //客戶端不斷發送請求到服務器
長輪詢(longplling) //一般30s超時
異步streaing
iframe數據量
全雙工:數據發送和接收可以同時進行。
HTTP協議是不具備全雙工的。
1.3 軟件運行原理WebSocket協議是一種全雙工的通訊方式,并且支持跨域
二、消息推送服務器的搭建我們利用nginx的nginx-push-stream-module模塊來實現消息推送服務。
2.1 環境搭建首先需要下載模塊源碼,這里在git上直接克隆
git clone http://github.com/wandenberg/nginx-push-stream-module.git
將欲增加的模塊路徑定義為一個變量(此步驟非必要步驟,且定義的變量只能當前會話可用,只是為了后續操作方便)
NGINX_PUSH_STREAM_MODULE_PATH=$PWD/nginx-push-stream-module
以下是nginx已經安裝過的情況下增加模塊,因為以前nginx安裝在/usr/local/nginx目錄下,所以下面的操作都是以此目錄為路徑進行操作,如果安裝到其他目錄有些命令需要做對應的更改。
先查看原有nginx的配置參數并拷貝出來備用
/usr/local/nginx/sbin/nginx -V
解壓相同版本的nginx源碼包(以前安裝時的源碼包),如果已經刪除了課重新下載,版本相同即可(這里以1.12.1版本為例)
nginx官網
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原始的配置,也就是剛才拷貝出來配置,這個務必加上)
./configure --add-module=$NGINX_PUSH_STREAM_MODULE_PATH ***
編譯:
make
不要執行make install避免覆蓋,備份原來的nginx可執行文件
備份:
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak
將編譯好的nginx復制到原始nginx的sbin目錄
cp objs/nginx /usr/local/nginx/sbin/
到此為止已經安裝完畢,可以再執行/usr/local/nginx/sbin/nginx -V查看一下nginx的模塊情況。
2.3 nginx配置安裝后需要在nginx的配置文件nginx.conf或者其他包含的配置文件中做如下配置:
1. 在http段加入:
#最大共享內存 push_stream_shared_memory_size 100m; #頻道最大長度 push_stream_max_channel_id_length 200; #每個頻道緩存的最大消息數量 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
出現以下提示表示正確:
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 測試訂閱/發布在Linux命令下使用curl做如下測試(其中ch1代表頻道)
#發布信息: curl http://localhost:8080/pub?id=ch1 -d "發布消息測試" #訂閱信息: curl http://localhost:8080/lp/ch1
參考學習視頻:消息推送服務器構建實時聊天室視頻教程
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39804.html
摘要:本文對過去和現在流行的實時推送技術進行了比較與總結。以上我們介紹了三種實時推送技術,然而各自的缺點很明顯,使用起來并不理想,接下來我們著重介紹另一種技術它是比較理想的雙向通信技術。 前言 隨著 Web 的發展,用戶對于 Web 的實時推送要求也越來越高 ,比如,工業運行監控、Web 在線通訊、即時報價系統、在線游戲等,都需要將后臺發生的變化主動地、實時地傳送到瀏覽器端,而不需要用戶手動...
摘要:要做一個通信監測方面的事情,需要實時進行前后端的的消息推送,這里不分析輪詢和的區別,網上講的挺多的,下圖是兩者的通信示意圖,這里只寫怎么用。 要做一個通信監測方面的事情,需要實時進行前后端的的消息推送,這里不分析Ajax輪詢和WebSocket的區別,網上講的挺多的,下圖是兩者的通信示意圖,這里只寫怎么用。showImg(https://segmentfault.com/img/rem...
摘要:要做一個通信監測方面的事情,需要實時進行前后端的的消息推送,這里不分析輪詢和的區別,網上講的挺多的,下圖是兩者的通信示意圖,這里只寫怎么用。 要做一個通信監測方面的事情,需要實時進行前后端的的消息推送,這里不分析Ajax輪詢和WebSocket的區別,網上講的挺多的,下圖是兩者的通信示意圖,這里只寫怎么用。showImg(https://segmentfault.com/img/rem...
摘要:為了達到這種雙向的實時消息傳遞,很明顯地考慮用來實現。注意這個文件并不能用在實際的項目中,只是用來顯示消息推送的效果而已。參考資料本文在我博客上的原地址利用實現消息實時推送 項目背景介紹 最近在寫的項目中存在著社交模塊,需要實現這樣的一個功能:當發生了用戶被點贊、評論、關注等操作時,需要由服務器向用戶實時地推送一條消息。最終完成的項目地址為:socket-message-push,這里...
摘要:并且指定收到消息,以及端口的監聽方法。四代碼示例多房間實時聊天室配置版本須在里配置定義,并設置。使同一個的請求能夠落在同一個機器同一個進程中。通過主進程統一管理維護子進程,每個進程監聽一個端口。 showImg(http://7tszky.com1.z0.glb.clouddn.com/FkhApdRySR927nkdDZuUPBQbJtXG); 一、相關技術介紹: 消息實時推送,指的...
閱讀 3503·2021-11-24 09:39
閱讀 781·2019-08-30 14:22
閱讀 3031·2019-08-30 13:13
閱讀 2310·2019-08-29 17:06
閱讀 2918·2019-08-29 16:22
閱讀 1255·2019-08-29 10:58
閱讀 2427·2019-08-26 13:47
閱讀 1628·2019-08-26 11:39