您好,登錄后才能下訂單哦!
本篇內容主要講解“WebSocket有什么優點”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“WebSocket有什么優點”吧!
大家都知道,HTML頁面在剛剛開始出現的時候是靜態的,不能夠進行交互,后來有了JavaScript,在一定程度上解決了這個問題,但是JavaScript剛出現的時候并不能和服務端進行交互,直到Ajax的出現。Ajax有效的解決了頁面和服務端進行交互的問題,不過Ajax有一個問題,就是所有的請求都必須由客戶端發起,服務端進行響應,如果服務端有最新的消息,難以即時的發送到客戶端去,在WebSocket技術出現之前,為了讓客戶端能夠即時的獲取服務端的數據,一般采用如下三種方案:
這是最簡單的一種解決方案, 就是客戶端在固定的時間間隔下(一般是1秒)不停的向服務器端發送請求,查看服務端是否有最新的數據,服務端如果有最新的數據則返回給客戶端,服務端如果沒有則返回一個空的json或者xml文檔,這種方式的實現起來簡單,但是弊端也很明顯,就是會有大量的無效請求,服務端的資源被大大的浪費了。
長連接有點類似于輪詢,不同的是服務端不是每次都會響應客戶端的請求,只有在服務端有最新數據的時候才會響應客戶端的請求,這種方式很明顯會節省網絡資源和服務端資源,但是也存在一些問題,比如:
1.如果瀏覽器在服務器響應之前有新數據要發送就只能創建一個新的并發請求,或者先嘗試斷掉當前請求然后再創建新的請求。
2.TCP和HTTP規范中都有連接超時一說,所以所謂的長連接并不能一直持續,服務端和客戶端的連接需要定期的連接和關閉再連接,當然也有一些技術能夠延長每次連接的時間,這是題外話。
Applet和Flash都已經是明日黃花了,不過這兩個技術在當年除了可以讓我們的HTML頁面更加絢麗之外,還可以解決消息推送問題。在Ajax這種技術去實現全雙工通信已經陷入困境的時候,開發者試圖用Applet和Flash來模擬全雙工通信,開發者可以創建一個只有1個像素點大小的普通透明的Applet或者Flash,然后將之內嵌在頁面中, 然后這個Applet或者Flash中的代碼創建出一個Socket連接,這種連接方式消除了HTTP協議中的各種限制,當服務器有消息發送到客戶端的時候,開發者可以在Applet或者Flash中調用JavaScript函數,并將服務器傳來的消息傳遞給JavaScript函數,然后更新頁面,當瀏覽器有數據要發送給服務器的時候,也一樣,通過Applet或者Flash來傳遞。這種方式真正的實現了全雙工通信,不過也有問題,如下:
1.瀏覽器必須能夠運行Java或者Flash
2.無論是Applet還是Flash都存在安全問題
3.隨著HTML5在標準在瀏覽器中廣泛支持,Flash下架已經被提上日程(
終于要放棄,Adobe宣布2020年正式停止支持Flash/http://tech.163.com/17/0726/07/CQ8M4HT200097U7T.html)
既然上面這些技術都不行,那么誰行?當然是我WebSocket了!
要說WebSocket協議,我們得先來說說HTTP協議的一個請求頭,事實上,所有的HTTP客戶端(瀏覽器、移動端等)都可以在請求頭中包含Connection:Upgrade,這個表示客戶端希望升級請求協議,那么希望升級成什么樣的協議呢?我們需要在Upgrade頭中指定一個或者多個協議的列表,當然這些協議必須兼容HTTP/1.1協議。服務器收到請求之后,如果接受升級請求,那么將會返回一個101的狀態碼,表示轉換請求協議,同時在響應的Upgrade頭中使用單個值,這個單個值就是請求協議列表中服務器支持的第一個協議(即請求頭的Upgrade字段中列出來的協議列表中服務器支持的第一個協議)。
HTTP升級最大的好處是最終使我們可以使用任意的協議,在升級握手完成之后,它就不再使用HTTP連接了,我們甚至可以在升級握手完成之后建立一個Socket連接,理論上我們可以使用HTTP升級在兩個端點之間使用任何自己設計的協議,進而創建出各種各樣的TCP通信,當然瀏覽器不會讓開發者隨意去這么做,而是要指定某些協議,WebSocket應運而生!
我們來看一個截圖:
OK,了解了HTTP/1.1協議的升級特性之后,我們再來詳細看看整個過程是怎么樣的?
一個WebSocket請求首先使用非正常的HTTP請求以特定的模式訪問一個URL,這個URL有兩種模式,分別是ws和wss,對應HTTP協議中的http和https,請求頭中除了Connection:Upgrade之外還有一個Upgrade:websocket,它們兩個將共同告訴服務器將連接升級為WebSocket這樣一種全雙工協議。如此,在握手完成之后,文本消息或者其他二進制消息就可以同時在兩個方向上進行發送,而不需要關閉和重建連接。此時的客戶端和服務端關系其實是對等的,他們都可以互相向對方主動發消息。那么這里有一點需要注意:那就是ws和wss模式并不能算作HTTP協議的一部分,因為HTTP請求和請求頭并不包含URL模式,HTTP請求只在請求的第一行中包含相對于服務器的URL,在Host頭中包含域名,而WebSocket中特有的ws和wss模式主要用于通知瀏覽器和API是希望使用SSL/TLS(wss),還是希望使用不加密的方式(ws)進行連接。
說了這么多,那么接下來我們來看看WebSocket協議都有哪些優勢:
1.由于WebSocket連接在端口80(ws)或者443(wss)上創建,與HTTP使用的端口相同,這樣,基本上所有的防火墻都不會阻塞WebSocket連接
2.WebSocket使用HTTP協議進行握手,因此它可以自然而然的集成到網絡瀏覽器和HTTP服務器中
3.心跳消息(ping和pong)將被反復的發送,進而保持WebSocket連接幾乎一直處于活躍狀態。一般來說是這樣,一個節點周期性的發送一個小數據包到另外一個節點(ping),而另一個節點則使用了包含了相同數據的數據包作為響應(pong),這樣兩個節點都將處于連接狀態
4.使用該協議,當消息啟動或者到達的時候,服務端和客戶端都可以知道
5.WebSocket連接關閉時將發送一個特殊的關閉消息
6.WebSocket支持跨域,可以避免Ajax的限制
7.HTTP規范要求瀏覽器將并發連接數限制為每個主機名兩個連接,但是當我們使用WebSocket的時候,當握手完成之后該限制就不存在了,因為此時的連接已經不再是HTTP連接了
WebSocket協議的用途
說了這么多那么WebSocket協議到底可以用在哪些地方呢?事實上,WebSocket協議的用途幾乎是沒有限制的,比如:
1.網頁上的在線聊天
2.多人在線游戲
3.在線股票網站
4.在線即時新聞網站
5.高清視頻流
6.應用集群之間的通信
7.遠程系統/軟件的狀態和性能的實時監控
到此,相信大家對“WebSocket有什么優點”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。