溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

WebSocket有什么優(yōu)點

發(fā)布時間:2021-12-07 14:36:13 來源:億速云 閱讀:288 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“WebSocket有什么優(yōu)點”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“WebSocket有什么優(yōu)點”吧!

為什么要有WebSocket這個技術(shù)

大家都知道,HTML頁面在剛剛開始出現(xiàn)的時候是靜態(tài)的,不能夠進(jìn)行交互,后來有了JavaScript,在一定程度上解決了這個問題,但是JavaScript剛出現(xiàn)的時候并不能和服務(wù)端進(jìn)行交互,直到Ajax的出現(xiàn)。Ajax有效的解決了頁面和服務(wù)端進(jìn)行交互的問題,不過Ajax有一個問題,就是所有的請求都必須由客戶端發(fā)起,服務(wù)端進(jìn)行響應(yīng),如果服務(wù)端有最新的消息,難以即時的發(fā)送到客戶端去,在WebSocket技術(shù)出現(xiàn)之前,為了讓客戶端能夠即時的獲取服務(wù)端的數(shù)據(jù),一般采用如下三種方案:

輪詢

這是最簡單的一種解決方案, 就是客戶端在固定的時間間隔下(一般是1秒)不停的向服務(wù)器端發(fā)送請求,查看服務(wù)端是否有最新的數(shù)據(jù),服務(wù)端如果有最新的數(shù)據(jù)則返回給客戶端,服務(wù)端如果沒有則返回一個空的json或者xml文檔,這種方式的實現(xiàn)起來簡單,但是弊端也很明顯,就是會有大量的無效請求,服務(wù)端的資源被大大的浪費了。

長連接

長連接有點類似于輪詢,不同的是服務(wù)端不是每次都會響應(yīng)客戶端的請求,只有在服務(wù)端有最新數(shù)據(jù)的時候才會響應(yīng)客戶端的請求,這種方式很明顯會節(jié)省網(wǎng)絡(luò)資源和服務(wù)端資源,但是也存在一些問題,比如:

1.如果瀏覽器在服務(wù)器響應(yīng)之前有新數(shù)據(jù)要發(fā)送就只能創(chuàng)建一個新的并發(fā)請求,或者先嘗試斷掉當(dāng)前請求然后再創(chuàng)建新的請求。
2.TCP和HTTP規(guī)范中都有連接超時一說,所以所謂的長連接并不能一直持續(xù),服務(wù)端和客戶端的連接需要定期的連接和關(guān)閉再連接,當(dāng)然也有一些技術(shù)能夠延長每次連接的時間,這是題外話。

Applet和Flash

Applet和Flash都已經(jīng)是明日黃花了,不過這兩個技術(shù)在當(dāng)年除了可以讓我們的HTML頁面更加絢麗之外,還可以解決消息推送問題。在Ajax這種技術(shù)去實現(xiàn)全雙工通信已經(jīng)陷入困境的時候,開發(fā)者試圖用Applet和Flash來模擬全雙工通信,開發(fā)者可以創(chuàng)建一個只有1個像素點大小的普通透明的Applet或者Flash,然后將之內(nèi)嵌在頁面中, 然后這個Applet或者Flash中的代碼創(chuàng)建出一個Socket連接,這種連接方式消除了HTTP協(xié)議中的各種限制,當(dāng)服務(wù)器有消息發(fā)送到客戶端的時候,開發(fā)者可以在Applet或者Flash中調(diào)用JavaScript函數(shù),并將服務(wù)器傳來的消息傳遞給JavaScript函數(shù),然后更新頁面,當(dāng)瀏覽器有數(shù)據(jù)要發(fā)送給服務(wù)器的時候,也一樣,通過Applet或者Flash來傳遞。這種方式真正的實現(xiàn)了全雙工通信,不過也有問題,如下:

1.瀏覽器必須能夠運行Java或者Flash
2.無論是Applet還是Flash都存在安全問題
3.隨著HTML5在標(biāo)準(zhǔn)在瀏覽器中廣泛支持,F(xiàn)lash下架已經(jīng)被提上日程(
終于要放棄,Adobe宣布2020年正式停止支持Flash/http://tech.163.com/17/0726/07/CQ8M4HT200097U7T.html)

WebSocket有哪些特點

既然上面這些技術(shù)都不行,那么誰行?當(dāng)然是我WebSocket了!

HTTP/1.1的升級特性

要說WebSocket協(xié)議,我們得先來說說HTTP協(xié)議的一個請求頭,事實上,所有的HTTP客戶端(瀏覽器、移動端等)都可以在請求頭中包含Connection:Upgrade,這個表示客戶端希望升級請求協(xié)議,那么希望升級成什么樣的協(xié)議呢?我們需要在Upgrade頭中指定一個或者多個協(xié)議的列表,當(dāng)然這些協(xié)議必須兼容HTTP/1.1協(xié)議。服務(wù)器收到請求之后,如果接受升級請求,那么將會返回一個101的狀態(tài)碼,表示轉(zhuǎn)換請求協(xié)議,同時在響應(yīng)的Upgrade頭中使用單個值,這個單個值就是請求協(xié)議列表中服務(wù)器支持的第一個協(xié)議(即請求頭的Upgrade字段中列出來的協(xié)議列表中服務(wù)器支持的第一個協(xié)議)。
HTTP升級最大的好處是最終使我們可以使用任意的協(xié)議,在升級握手完成之后,它就不再使用HTTP連接了,我們甚至可以在升級握手完成之后建立一個Socket連接,理論上我們可以使用HTTP升級在兩個端點之間使用任何自己設(shè)計的協(xié)議,進(jìn)而創(chuàng)建出各種各樣的TCP通信,當(dāng)然瀏覽器不會讓開發(fā)者隨意去這么做,而是要指定某些協(xié)議,WebSocket應(yīng)運而生!
我們來看一個截圖:
WebSocket有什么優(yōu)點

使用HTTP/1.1升級的WebSocket協(xié)議

OK,了解了HTTP/1.1協(xié)議的升級特性之后,我們再來詳細(xì)看看整個過程是怎么樣的?
一個WebSocket請求首先使用非正常的HTTP請求以特定的模式訪問一個URL,這個URL有兩種模式,分別是ws和wss,對應(yīng)HTTP協(xié)議中的http和https,請求頭中除了Connection:Upgrade之外還有一個Upgrade:websocket,它們兩個將共同告訴服務(wù)器將連接升級為WebSocket這樣一種全雙工協(xié)議。如此,在握手完成之后,文本消息或者其他二進(jìn)制消息就可以同時在兩個方向上進(jìn)行發(fā)送,而不需要關(guān)閉和重建連接。此時的客戶端和服務(wù)端關(guān)系其實是對等的,他們都可以互相向?qū)Ψ街鲃影l(fā)消息。那么這里有一點需要注意:那就是ws和wss模式并不能算作HTTP協(xié)議的一部分,因為HTTP請求和請求頭并不包含URL模式,HTTP請求只在請求的第一行中包含相對于服務(wù)器的URL,在Host頭中包含域名,而WebSocket中特有的ws和wss模式主要用于通知瀏覽器和API是希望使用SSL/TLS(wss),還是希望使用不加密的方式(ws)進(jìn)行連接。

WebSocket協(xié)議的優(yōu)勢

說了這么多,那么接下來我們來看看WebSocket協(xié)議都有哪些優(yōu)勢:

1.由于WebSocket連接在端口80(ws)或者443(wss)上創(chuàng)建,與HTTP使用的端口相同,這樣,基本上所有的防火墻都不會阻塞WebSocket連接

2.WebSocket使用HTTP協(xié)議進(jìn)行握手,因此它可以自然而然的集成到網(wǎng)絡(luò)瀏覽器和HTTP服務(wù)器中

3.心跳消息(ping和pong)將被反復(fù)的發(fā)送,進(jìn)而保持WebSocket連接幾乎一直處于活躍狀態(tài)。一般來說是這樣,一個節(jié)點周期性的發(fā)送一個小數(shù)據(jù)包到另外一個節(jié)點(ping),而另一個節(jié)點則使用了包含了相同數(shù)據(jù)的數(shù)據(jù)包作為響應(yīng)(pong),這樣兩個節(jié)點都將處于連接狀態(tài)

4.使用該協(xié)議,當(dāng)消息啟動或者到達(dá)的時候,服務(wù)端和客戶端都可以知道

5.WebSocket連接關(guān)閉時將發(fā)送一個特殊的關(guān)閉消息

6.WebSocket支持跨域,可以避免Ajax的限制

7.HTTP規(guī)范要求瀏覽器將并發(fā)連接數(shù)限制為每個主機(jī)名兩個連接,但是當(dāng)我們使用WebSocket的時候,當(dāng)握手完成之后該限制就不存在了,因為此時的連接已經(jīng)不再是HTTP連接了

WebSocket協(xié)議的用途

說了這么多那么WebSocket協(xié)議到底可以用在哪些地方呢?事實上,WebSocket協(xié)議的用途幾乎是沒有限制的,比如:

1.網(wǎng)頁上的在線聊天

2.多人在線游戲

3.在線股票網(wǎng)站

4.在線即時新聞網(wǎng)站

5.高清視頻流

6.應(yīng)用集群之間的通信

7.遠(yuǎn)程系統(tǒng)/軟件的狀態(tài)和性能的實時監(jiān)控

到此,相信大家對“WebSocket有什么優(yōu)點”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI