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