當前背景: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);
};