網頁推送服務(基於僞websocket)

當前背景:java

1.網頁要實現消息推送,一般採用輪詢(Polling)、Comet技術、Comet又可細分爲兩種實現方式,一種是長輪詢機制,一種稱爲流技術,這 兩種方式其實是對輪詢技術的改進。這些方案帶來很明顯的缺點,須要由瀏覽器對服務器發出HTTP request,大量消耗服務器帶寬和資源nginx

HTML5定義了WebSocket協議,能更好的節省服務器資源和帶寬,並實現真正意義上的實時推送web

 

2.若是真要從頭作個消息推送服務、要作的事情不少、除了核心的消息推送,還要處理centos

離線消息處理,重複消息 、上線給推送,多帳戶同時在線的維護,維護心跳。這還只是推送自身,瀏覽器

還須要結合業務,作更多定製服務、併發、安全、及時性安全

 

3.web須要一個即時推送服務,目前只有app端服務器

 

當前的解決:websocket

目前在虛擬機搭建的websocket服務,是基於nginx模塊,是須要積於源碼進行從新編譯。併發

基於訂閱/發佈模型,可定製、配製性高app

 

性能實測:

機器:Xeon(R) E5-2620 v2 @ 2.10GHz ×4核心 centos6.5 虛擬機

客戶端:mac java應用 沒開虛擬網卡(端口2字節,排除1024系統級,就6W了)

 

測試1:鏈接數6W

2.這是併發6W 同時發消息,監聽同1帳戶。1分鐘260條

3.已發送完

4.鏈接數 6W數單發消息基本毫秒到達、

測試2:鏈接數10萬

2.測試發消息 10萬 同時發260/min

3.發完了

測試1跟測試2的nginx有過調整,可能參數有點不一樣。整體數據還能夠、

同時併發,即時壓力大,客戶端及時性很高、不到秒級

 

虛擬機地址: 192.168.40.* root *****

客戶端網頁:

ws3 = new WebSocket("ws://http://192.168.40.131:8099/pub_fishery/uid_123456");

ws3.onmessage = function(evt){

console.log(evt.data);

};

相關文章
相關標籤/搜索