消息推送從始至終~目錄


認識它

消息推送這個東西從有了互聯網就出現了,但直到出現了HTML5的Websocket,這個東西才算真的,更好了得到了解決,因為之前的方式,我們公認為,它對服務器的壓力太大了,客戶端不斷的在做polling工作,直到服務端有了消息,然后將消息獲取過來,這種方式,始終是被動式的,並且,通過瀏覽器發送的請求,在HTML5出現之前都是HTTP方式的,這種一個請求,一個響應的方式不能很好的實現一個長鏈接的保持,直到出現了websocket,它可以使一個客戶端與服務端保持一個長鏈接,這事實上,也是實現服務器消息推送到客戶端的基礎。

它的發展歷史

2000年之前為第一波消息推送技術,使用的概念叫Webcasting。大致思想就是用戶來服務端注冊一個或者多個通道channel,然后服務端確定給某些個channel或某個channel發送消息。2000到2007年最火的詞叫comet,比如有Polling(這個是最普通的輪詢),Long Polling(把HTTP的響應鎖住,當有消息時,通過channel返回客戶端),但是不管什么技術,都僅限瀏覽器,而又因為瀏覽器只能發起HTTP的單向的通信請求,所以,人們就想起了更穩定的長鏈接方式socket,但是Socket方式是走TCP協議的,瀏覽器如何能發起TCP連接呢?HTML5的Websocket技術就解決了這個問題。

新協議,老技術

Websocket其實是一些老技術的結合,本身並不是一種新的技術,但是一種新的協議,它的地址形式如ws://192.168.0.3:8090,wss://192.168.0.3:8090,后面的地址形式是加密的,就是HTTP協議地址有http和https一樣。

Websocket它首先向服務器發一個HTTP請求,與服務器握手成功后,再以TCP的方式進行數據傳輸,所以Websocket其實是結合了HTTP和TCP協議的一種新的協議方式,但本身的技術是老的,呵呵。

百度百科對websocket的闡述

目標

WebSocket 規范的目標是在瀏覽器中實現和服務器端雙向通信。雙向通信可以拓展瀏覽器上的應用類型,例如實時的數據推送(股票行情)、游戲、聊天等.

背景

在瀏覽器中通過http僅能實現單向的通信,comet可以一定程度上模擬雙向通信,但 效率較低,並需要服務器有較好的支持; flash中的socket和xmlsocket可以實現真正的雙向通信,通過 flex ajax bridge,可以在javascript中使用這兩項功能. 可以預見,如果websocket一旦在瀏覽器中得到實現,將會替代上面兩項技術,得到廣泛的使用.面對這種狀況,HTML5定義了WebSocket協 議,能更好的節省服務器資源和帶寬並達到實時通訊。

原理

WebSocket protocol 是HTML5一種新的協議(protocol)。它是實現了瀏覽器與服務器全雙工通信(full-duplex)。
現很多網站為了實現即時通訊(real-time),所用的技術都是輪詢(polling)。輪詢是在特定的的時間 間隔(time interval)(如每1秒),由瀏覽器對服務器發出HTTP request,然后由服務器返回最新的數據給客服端的瀏覽器。這種傳統的HTTP request的模式帶來很明顯的缺點 – 瀏覽器需要不斷的向服務器發出請求(request),然而HTTP request 的header是非常長的,里面包含的數據可能只是一個很小的值,這樣會占用很多的帶寬。
而最比較新的技術去做輪詢的效果是Comet – 用了AJAX。但這種技術雖然可達到全雙工通信,但依然需要發出請求(reuqest)。
在 WebSocket API,瀏覽器和服務器只需要要做一個握手的動作,然后,瀏覽器和服務器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送。在此 WebSocket 協議中,為我們實現即時服務帶來了兩大好處:
1. Header
互相溝通的Header是很小的-大概只有 2 Bytes
2. Server Push
服務器可以主動傳送數據給客戶端

目錄

第一回  認識Websocket及原來的消息推送方式

第二回  SignalR的出現,改變了這一切

第三回  SignalR與MVC搭建消息推送環境

相關參考文章

http://www.asp.net/signalr

http://baike.baidu.com/view/3623887.htm

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM