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