沐鳴登錄_客戶端與服務端長連接的幾種方式

一、ajax 輪詢

實現原理:ajax 輪詢指客戶端每間隔一段時間向服務端發起請求,保持數據的同步。

優點:可實現基礎(指間隔時間較短)的數據更新。

缺點:這種方法也只是盡量的模擬即時傳輸,但並非真正意義上的即時通訊,很有可能出現客戶端請求時,服務端數據並未更新。或者服務端數據已更新,但客戶端未發起請求。導致多次請求資源浪費,效率低下。

二、long poll 長輪詢

實現原理:

long poll 指的是客戶端發送請求之後,如果沒有數據返回,服務端會將請求掛起放入隊列(不斷開連接)處理其他請求,直到有數據返回給客戶端。然後客戶端再次發起請求,以此輪詢。在 HTTP1.0 中客戶端可以設置請求頭 Connection:keep-alive,服務端收到該請求頭之後知道這是一個長連接,在響應報文頭中也添加 Connection:keep-alive。客戶端收到之後表示長連接建立完成,可以繼續發送其他的請求。在 HTTP1.1 中默認使用了 Connection:keep-alive 長連接。

優點:減少客戶端的請求,降低無效的網絡傳輸,保證每次請求都有數據返回,不會一直佔用線程。

缺點:無法處理高併發,當客戶端請求量大,請求頻繁時對服務器的處理能力要求較高。服務器一直保持連接會消耗資源,需要同時維護多個線程,服務器所能承載的 TCP 連接數是有上限的,這種輪詢很容易把連接數頂滿。每次通訊都需要客戶端發起,服務端不能主動推送。

三、iframe 長連接

實現原理:
在網頁上嵌入一個 iframe 標籤,該標籤的 src 屬性指向一個長連接請求。這樣服務端就可以源源不斷地給客戶端傳輸信息。保障信息實時更新。

優點:消息及時傳輸。

缺點:消耗服務器資源。

四、WebSocket

實現原理:

Websocket 實現了客戶端與服務端的雙向通信,只需要連接一次,就可以相互傳輸數據,很適合實時通訊、數據實時更新等場景。

Websocket 協議與 HTTP 協議沒有關係,它是一個建立在 TCP 協議上的全新協議,為了兼容 HTTP 握手規範,在握手階段依然使用 HTTP 協議,握手完成之後,數據通過 TCP 通道進行傳輸。

Websoket 數據傳輸是通過 frame 形式,一個消息可以分成幾個片段傳輸。這樣大數據可以分成一些小片段進行傳輸,不用考慮由於數據量大導致標誌位不夠的情況。也可以邊生成數據邊傳遞消息,提高傳輸效率。

與 HTTP 的區別:
以下是一個 WebSoket 協議的請求響應報文頭,與 HTTP 協議的區別是:

URL是以 ws: 開頭,如果是對應的 HTTPS,則以 wss: 開頭。WebSocket 使用 ws 或 wss 為統一資源標誌符,其中 wss 表示在 TLS 之上的 Websocket。

Status Code:101。該狀態碼錶示協議切換。服務器返回了 101 ,表示沒有釋放 TCP 連接。WebSoket 協議握手階段還是依賴於 HTTP 協議,到數據傳輸階段便切換協議。

Conection:upgrade,表示協議升級。在 HTTP 協議中,該請求頭有兩個值,一個是 close , HTTP/1.0 默認值,表示客戶端或服務端想要關閉連接。另一個是 keep-alive,HTTP/1.1 默認值,表示長連接。

以下頭部字段是只有 WebSocket 協議才有的字段。
請求頭:
Sec-WebSocket-Extension:表示客戶端協商的拓展特性。
Sec-WebSocket-Key:是一個 Base64 encode 的密文,由瀏覽器隨機生成,用來驗證是否是 WebSocket 協議。
Sec-WebSocket-Version:表示 WebSocket 協議版本。

響應頭:
Sec-WebSocket-Extension:表示服務端支持的拓展特性。
Sec-WebSocket-Accept:與客戶端的 Sec-WebSocket-Key 相對應,是經過服務器確認,加密過後的 Sec-WebSocket-Key。

優點:

雙向通信。客戶端和服務端雙方都可以主動發起通訊。
沒有同源限制。客戶端可以與任意服務端通信,不存在跨域問題。
數據量輕。第一次連接時需要攜帶請求頭,後面數據通信都不需要帶請求頭,減少了請求頭的負荷。
傳輸效率高。因為只需要一次連接,所以數據傳輸效率高。
缺點:

長連接需要後端處理業務的代碼更穩定,推送消息相對複雜;
長連接受網絡限制比較大,需要處理好重連。
兼容性,WebSocket 只支持 IE10 及其以上版本。
服務器長期維護長連接需要一定的成本,各個瀏覽器支持程度不一;
成熟的 HTTP 生態下有大量的組件可以復用,WebSocket 則沒有,遇到異常問題難以快速定位快速解決。

站長推薦

1.雲服務推薦: 國內主流雲服務商,各類雲產品的最新活動,優惠券領取。地址:阿里雲騰訊雲華為雲

2.廣告聯盟: 整理了目前主流的廣告聯盟平台,如果你有流量,可以作為參考選擇適合你的平台點擊進入

鏈接: http://www.fly63.com/article/detial/9074