Httpweb
http是無狀態的協議,不保存會話狀態。http是單向的通訊協議,即瀏覽器發起一個Request,服務器迴應一個Response。瀏覽器
Ajax安全
瀏覽器經過輪詢(定時)的方式不斷向服務器請求。這種僞實時的更新方式,效率偏低,通常而言,實時更新的數據,數據量並不大,所以每每容易形成Http請求的Header信息比數據自己還多,並且大量的請求是無用的。服務器
Cometwebsocket
基於Ajax的長輪詢(long-polling)。瀏覽器發出一個請求,服務器端會阻塞Request直到有數據傳輸或超時才返回。客戶端處理完服務器發送的數據之後,繼續發出請求。網絡
另外一種實現Comet技術的方式稱爲The forever iframe technique。它經過在頁面中設置一個iframe標籤,將src屬性設置爲一個對長鏈接的請求。缺點是頁面始終會顯示未徹底加載。異步
WebSocketsocket
Websocket是Html5定義的一種新協議,實現了瀏覽器與服務器全雙工通訊(full-duplex)。任何支持Html5的瀏覽器都支持WebSocket。瀏覽器發出WebSocket鏈接請求,服務器發出迴應,創建通道,完成handshaking,實現真正的實時通訊。websocket容許經過JavaScript創建與遠程服務器的鏈接,從而實現客戶端與服務器間雙向的通訊。函數
在websocket中有兩個方法:加密
一、send() 向遠程服務器發送數據
二、close() 關閉該websocket連接
websocket同時還定義了幾個監聽函數
一、onopen 當網絡鏈接創建時觸發該事件
二、onerror 當網絡發生錯誤時觸發該事件
三、onclose 當websocket被關閉時觸發該事件
四、onmessage 當websocket接收到服務器發來的消息的時觸發的事件,也是通訊中最重要的一個監聽事件。
websocket還定義了一個readyState屬性,這個屬性能夠返回websocket所處的狀態:
一、CONNECTING(0) websocket正嘗試與服務器創建鏈接
二、OPEN(1) websocket與服務器已經創建鏈接
三、CLOSING(2) websocket正在關閉與服務器的鏈接
四、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