WebSocket实现实时通信
WebSocket 是一種數據通信協議,也是用于客戶端和服務端數據通信,類似于我們常見的 http
既然有 http,為啥還要 WebSocket
http 通信是單向的
請求 + 響應
沒有請求也就沒有響應
初次接觸 WebSocket 的人,都會問同樣的問題:我們已經有了 HTTP 協議,為什么還需要另一個協議?它能帶來什么好處?
答案很簡單,因為 HTTP 協議有一個缺陷:通信只能由客戶端發起。
舉例來說,我們想了解今天的天氣,只能是客戶端向服務器發出請求,服務器返回查詢結果。HTTP 協議做不到服務器主動向客戶端推送信息。
這種單向請求的特點,注定了如果服務器有連續的狀態變化,客戶端要獲知就非常麻煩。我們只能使用"輪詢":每隔一段時候,就發出一個詢問,了解服務器有沒有新的信息。最典型的場景就是聊天室。
輪詢的效率低,非常浪費資源(因為必須不停連接,或者 HTTP 連接始終打開)。因此,工程師們一直在思考,有沒有更好的方法。WebSocket 就是這樣發明的。
WebSocket 協議在 2008 年誕生,2011 年成為國際標準。所有瀏覽器都已經支持了。
它的最大特點就是,服務器可以主動向客戶端推送信息,客戶端也可以主動向服務器發送信息,是真正的雙向平等對話,屬于服務器推送技術的一種。
簡單理解:
HTTP 打電話:
我問一句
你回答一句
沒有提問就沒有回答,即便對方主動給你說話,我也是個聾子聽不見
WebSocket 打電話:
雙向對話
HTTP 和 WebSocket 通信模型
其他特點包括:
(1)和 HTTP 一樣屬于應用層協議,也是建立在 TCP 協議之上,服務器端的實現比較容易。
(2)與 HTTP 協議有著良好的兼容性。默認端口也是 80 和 443,并且握手階段(第 1 次建立連接)采用 HTTP 協議,因此握手時不容易屏蔽,能通過各種 HTTP 代理服務器。
(3)數據格式比較輕量,性能開銷小,通信高效。
(4)可以發送文本,也可以發送二進制數據。
(5)沒有同源跨域限制,客戶端可以與任意服務器通信。
WebSocket 不是用來代替 HTTP 的,它是用來解決實時通信的業務場景。如果業務不需要實時性,那就沒必要使用 WebSocket。
WebSocket 也是有資源消耗的,因為它要實時通信,也是需要和服務端保持一定的通信連接。
WebSocket 也是需要服務端配合才能使用。
(6)協議標識符是ws(如果加密,則為wss),服務器網址就是 URL。
(7)瀏覽器專門為 WebSocket 通信提供了一個請求對象 WebSocket
XmlHttPRequest 請求對象,發起 HTTP 協議請求
ws://example.com:80/some/pathhttp https ws wss使用原生 WebSocket(了解)
參考文檔:
MDN - WebSocket
瀏覽器為 HTTP 通信提供了 XMLHttpRequest 對象,同樣的,也為 WebSocket 通信提供了一個通信操作接口:WebSocket。
通信模型:
撥號(建立連接)
通話(雙向通信)
結束通話(關閉連接)
怎么查看 WebSocket 請求日志?
朝上的綠色箭頭是發出去的消息
朝下的紅色箭頭是收到的消息
總結
以上是生活随笔為你收集整理的WebSocket实现实时通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十、PHP框架Laravel学习笔记——
- 下一篇: 三、数据预处理——处理分类型数据:编码与