WebSocket知识点总结
### WebSocket概述
WebSocket是html5規范中的一個部分,它借鑒了socket這種思想,為web應用程序客戶端和服務端之間(注意是客戶端服務端)提供了一種全雙工通信機制。同時,它又是一種新的應用層協議,WebSocket協議是為了提供web應用程序和服務端全雙工通信而專門制定的一種應用層協議,通常它表示為:ws://echo.websocket.org/?encoding=text HTTP/1.1。通俗的講,WebSocket 是一種新的網絡通信協議,現在瀏覽器端很多高級功能都需要用到它。舉例來說,我們想了解今天的天氣,只能是客戶端向服務器發出請求,服務器返回查詢結果。HTTP 協議做不到服務器主動向客戶端推送信息。這種單向請求的特點,注定了如果服務器有連續的狀態變化,客戶端要獲知就非常麻煩。我們只能使用"輪詢":每隔一段時候,就發出一個詢問,了解服務器有沒有新的信息。最典型的場景就是聊天室。輪詢的效率低,非常浪費資源(因為必須不停連接,或者 HTTP 連接始終打開)。因此,工程師們一直在思考,有沒有更好的方法。WebSocket 就是這樣發明的。
WebSocket 協議在2008年誕生,2011年成為國際標準。所有瀏覽器都已經支持了。它的最大特點就是,服務器可以主動向客戶端推送信息,客戶端也可以主動向服務器發送信息,是真正的雙向平等對話,屬于服務器推送技術的一種。
1)建立在 TCP 協議之上,服務器端的實現比較容易;
2)與 HTTP 協議有著良好的兼容性。默認端口也是80和443,并且握手階段采用 HTTP 協議,因此握手時不容易屏蔽,能通過各種 HTTP 代理服務器;
3)數據格式比較輕量,性能開銷小,通信高效;
4)可以發送文本,也可以發送二進制數據;
5)沒有同源限制,客戶端可以與任意服務器通信;
6)協議標識符是ws(如果加密,則為wss),服務器網址就是 URL,形如:ws://example.com:80/some/path。
?
### WebSocket的通信原理
既然是基于瀏覽器端的web技術,那么它的通信肯定少不了http,websocket本身雖然也是一種新的應用層協議,但是它也不能夠脫離http而單獨存在。具體來講,我們在客戶端構建一個websocket實例,并且為它綁定一個需要連接到的服務器地址,當客戶端連接服務端的時候,會向服務端發送一個類似下面的http報文:
可以看到,這是一個http get請求報文,注意該報文中有一個upgrade首部,它的作用是告訴服務端需要將通信協議切換到websocket,如果服務端支持websocket協議,那么它就會將自己的通信協議切換到websocket,同時發給客戶端類似于以下的一個響應報文頭:
返回的狀態碼為101,表示同意客戶端協議轉換請求,并將它轉換為websocket協議。以上過程都是利用http通信完成的,稱之為websocket協議握手(websocket Protocol handshake),進過這握手之后,客戶端和服務端就建立了websocket連接,以后的通信走的都是websocket協議了。所以總結為websocket握手需要借助于http協議,建立連接后通信過程使用websocket協議。同時需要了解的是,該websocket連接還是基于我們剛才發起http連接的那個TCP連接。一旦建立連接之后,我們就可以進行數據傳輸了,websocket提供兩種數據傳輸:文本數據和二進制數據。
基于以上分析,我們可以看到,websocket能夠提供低延遲,高性能的客戶端與服務端的雙向數據通信。它顛覆了之前web開發的請求處理響應模式,并且提供了一種真正意義上的客戶端請求,服務器推送數據的模式,特別適合實時數據交互應用開發。
?
### WebSocket運行機制
WebSocket 是一種雙向通信協議,在建立連接后,WebSocket 服務器和 Browser/Client Agent 都能主動的向對方發送或接收數據,就像 Socket 一樣;
WebSocket 需要類似 TCP 的客戶端和服務器端通過握手連接,連接成功后才能相互通信。
?
WebSocket 是類似 Socket 的 TCP 長連接的通訊模式,一旦 WebSocket 連接建立后,后續數據都以幀序列的形式傳輸。在客戶端斷開 WebSocket 連接或 Server 端斷掉連接前,不需要客戶端和服務端重新發起連接請求。在海量并發及客戶端與服務器交互負載流量大的情況下,極大的節省了網絡帶寬資源的消耗,有明顯的性能優勢,且客戶端發送和接受消息是在同一個持久連接上發起,實時性優勢明顯。
?
?
?
總結
以上是生活随笔為你收集整理的WebSocket知识点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql 5.5 源码安装
- 下一篇: 一些实用的DBA语句之二(慢慢更新)