實現實時通信的幾種方式


Http

  http是無狀態的協議,不保存會話狀態。http是單向的通信協議,即瀏覽器發起一個Request,服務器回應一個Response。

Ajax

  瀏覽器通過輪詢(定時)的方式不斷向服務器請求。這種偽實時的更新方式,效率偏低,一般而言,實時更新的數據,數據量並不大,因此往往容易造成Http請求的Header信息比數據本身還多,而且大量的請求是無用的。

Comet

  基於Ajax的長輪詢(long-polling)。瀏覽器發出一個請求,服務器端會阻塞Request直到有數據傳輸或超時才返回。客戶端處理完服務器發送的數據以后,繼續發出請求。

  另一種實現Comet技術的方式稱為The forever iframe technique。它通過在頁面中設置一個iframe標簽,將src屬性設置為一個對長連接的請求。缺點是頁面始終會顯示未完全加載。

WebSocket

  Websocket是Html5定義的一種新協議,實現了瀏覽器與服務器全雙工通信(full-duplex)。任何支持Html5的瀏覽器都支持WebSocket。瀏覽器發出WebSocket連接請求,服務器發出回應,建立通道,完成handshaking,實現真正的實時通信。websocket允許通過JavaScript建立與遠程服務器的連接,從而實現客戶端與服務器間雙向的通信。

在websocket中有兩個方法:

1、send() 向遠程服務器發送數據

2、close() 關閉該websocket鏈接

websocket同時還定義了幾個監聽函數

1、onopen 當網絡連接建立時觸發該事件

2、onerror 當網絡發生錯誤時觸發該事件

3、onclose 當websocket被關閉時觸發該事件

4、onmessage 當websocket接收到服務器發來的消息的時觸發的事件,也是通信中最重要的一個監聽事件。

websocket還定義了一個readyState屬性,這個屬性可以返回websocket所處的狀態:

1、CONNECTING(0) websocket正嘗試與服務器建立連接

2、OPEN(1) websocket與服務器已經建立連接

3、CLOSING(2) websocket正在關閉與服務器的連接

4、CLOSED(3) websocket已經關閉了與服務器的連接

websocket的url開頭是ws,如果需要ssl加密可以使用wss,當我們調用websocket的構造方法構建一個websocket對象(new WebSocket(url))的之后,就可以進行即時通信了。

總結

  Comet在遇到網絡中斷等問題時,很難在不刷新頁面的情況下恢復通信,而WebSocket中提供了一個onclse函數可以用來處理網絡斷開后的情況。

  Websocket是雙向通信的,所以可能出現安全問題。

 

SignalR

  SignalR,全稱Microsoft ASP.NET SignalR,是一個使用 C#所寫成的服務器端應用程式稱呼,2012年由微軟所開發。以“定時事件觸發,異步輸入輸出”為其主要理念。

  當瀏覽器支持WebSocket時,SignalR使用WebSocket,當不支持時,使用其他技術來保證達到相同的效果。SignalR可以保證在不同的瀏覽器中以相同方式實現WebSocket,並且提供了一些功能擴展以豐富WebSocket。

安裝:使用Nuget ,Install-Package Microsoft.Aspnet.SignalR

         示例:Install-Package Microsoft.Aspnet.SignalR.Sample


免責聲明!

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



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