關(guān)于webSocket的話題并不少見,比如我們經(jīng)常遇到的聊天室啦,實(shí)時(shí)的消息互動(dòng)啦,巴拉巴拉很多東西都會(huì)使用的一項(xiàng)技術(shù)。接下來我們就具體來看看webSocket到底是什么東西以及具體的應(yīng)用場景
WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工(full-duplex)通信——允許服務(wù)器主動(dòng)發(fā)送信息給客戶端。
WebSocket通信協(xié)議于2011年被IETF定為標(biāo)準(zhǔn)RFC 6455,并被RFC7936所補(bǔ)充規(guī)范。
這一段是百度百科給的解釋,在這里提到了一個(gè)關(guān)鍵詞 全雙工,接下來我們就要提到三個(gè)概念了
單工 Simplex
通信雙方被明確的分為發(fā)送器和接收器,只允許單向的數(shù)據(jù)傳輸。
舉個(gè)栗子:比如收音機(jī),它除了接受信號(hào)并播放之外就沒有什么功能了,而此時(shí)的電臺(tái)就承擔(dān)了發(fā)送器這一角色
半雙工 Half Duplex
通信雙方既是發(fā)送器也是接收器,但在同一時(shí)刻只允許向一個(gè)方向傳送數(shù)據(jù)。
舉個(gè)栗子:比如步話機(jī),我們經(jīng)常看到的場景是這樣的
現(xiàn)場的客戶:喂喂, 為什么我的網(wǎng)頁訪問不到????? over
遠(yuǎn)程的技術(shù):什么?我先去查查網(wǎng)絡(luò)問題 over
現(xiàn)場的客戶:你們到底行不行啊,我花了大價(jià)錢你們就這么個(gè)服務(wù)? over
遠(yuǎn)程的技術(shù):大哥你別慌,我已經(jīng)跟服務(wù)器那邊聯(lián)系#@$!我們正在抓緊時(shí)間檢測問題#%……#¥% over
...
現(xiàn)場的客戶:你們別找了,我的網(wǎng)線被老鼠啃了 over
遠(yuǎn)程的技術(shù):...我去年買了個(gè)表

我們可以看到這種類似于回合制的場景就是半雙工的最大特點(diǎn)了
全雙工 Full Duplex
通信雙方既是發(fā)送器也是接收器,并且允許同時(shí)相互發(fā)送消息。
舉個(gè)栗子:
現(xiàn)場的客戶:喂喂, 為什么我的網(wǎng)頁訪問不到?。???
遠(yuǎn)程的技術(shù):什么?我先去查查網(wǎng)絡(luò)問題
現(xiàn)場的客戶:你們到底行不行啊...(被打斷)
遠(yuǎn)程的技術(shù):大哥你別慌,我已經(jīng)跟服務(wù)器那邊聯(lián)系#@$!我們正在抓緊時(shí)間檢測問題#%……#¥%!@
現(xiàn)場的客戶:...我好像..(再次被打斷)
遠(yuǎn)程的技術(shù):也有可能是xx問題,我再看看
現(xiàn)場的客戶:...你們不用..(再再次被打斷)
遠(yuǎn)程的技術(shù):不不不,已經(jīng)確定不是這個(gè)問題了,真是奇了怪了

...
現(xiàn)場的客戶:你們別找了,我的網(wǎng)線被老鼠啃了
遠(yuǎn)程的技術(shù):你為什么不早說???
現(xiàn)場的客戶:...你倒是給我機(jī)會(huì)說啊

好了,以上就是關(guān)于通信方式的三種方式了。接下來我們來了解一下webSocket具體是如何工作的
首先我們先看看他的大兄弟http是如何工作的

由上圖可以得到一個(gè)結(jié)論,啊,不是,我們得到的結(jié)論是如果客戶端需要獲取信息的話,就需要不斷的通過http真是一個(gè)話癆http請求訪問服務(wù)器來得到信息。在這里我們來看看下面的幾個(gè)概念
短連接
--連接開始--
http:我想要查一下托尼老師的信息
server:好啊,這是他的家庭住址,電話...@#&&%%*
--連接關(guān)閉--
--連接開始--
http:剛剛的信息搞掉了,你再給我發(fā)一份唄
server:???什么上一份,你再說啥?
--連接關(guān)閉--
--連接開始--
http:就剛剛的啊
server:???什么剛剛的,你再說啥?
--連接關(guān)閉--
--連接開始--
http:我想要查一下托尼老師的信息
server:好啊,這是他的家庭住址,電話...@#&&%%*
--連接關(guān)閉---
由此可知,服務(wù)器是屬魚的,你給他說的東西他轉(zhuǎn)眼就忘了
長連接
--連接開始--
http:我想要查一下托尼老師的信息
server:好啊,這是他的家庭住址,電話...@#&&%%*
http:剛剛的信息搞掉了,你再給我發(fā)一份唄
server:這是他的家庭住址,電話...@#&&%%*
http:托尼老師叫什么來著?
server:這是他的家庭住址,電話...@#&&%%*
http:托尼老師是做什么?
server:這是他的家庭住址,電話...@#&&%%*
--連接關(guān)閉--
由此可知,客戶端也是是屬魚的,你給他說的東西他轉(zhuǎn)眼就忘了,我們可以看到長連接對比與短連接來說的話,我們連接了長連接的話,我們就可以重復(fù)使用了,避免了頻繁的請求
短輪詢
http:藍(lán)翔技校招生了嗎?
server:...沒有
http:藍(lán)翔技校招生了嗎?
server:...沒有
http:藍(lán)翔技校招生了嗎?
server:...沒有
http:藍(lán)翔技校招生了嗎?
server內(nèi)心os:你怎么就不問問新東方呢?
短輪詢的話很簡單,就是每隔幾秒就向服務(wù)器發(fā)送一次請求用于獲取數(shù)據(jù)
長輪詢
http:藍(lán)翔技校招生了嗎?沒有的話等招生了再告訴我
...十年后
server:藍(lán)翔技校招生了,三百個(gè)機(jī)位不銹鋼,五百個(gè)技工技術(shù)強(qiáng)@#$@#!!@#
北大青鳥http:???
長輪詢的話,發(fā)送一次請求后,就等到服務(wù)器有響應(yīng)時(shí)才進(jìn)行返回
好了,關(guān)于webSocket的姿勢你get到了嗎?