国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

WebSocket的簡單介紹及應用

2024-05-06 15:39:02
字體:
來源:轉載
供稿:網友

定時刷新的不足與改進

web開發中可能遇到這樣的場景:網頁里的某一塊區域里寫了一些內容,但這些內容不是固定的,即使看網頁的人沒有做任何操作,它們也會隨時間不斷變化。股票行情、活動或游戲的榜單都是比較常見的例子。

對此,一般的做法是用setTimeout()或setInverval()定時執行任務,任務內容是Ajax訪問一次服務器,并在成功拿到返回數據后去更新頁面。

這種定時刷新的做法會有這樣一些感覺不足的地方:

頻繁的定時網絡請求對瀏覽器(客戶端)和服務器來說都是一種負擔,尤其是當網頁里有多個定時刷新區域的時候。 某幾次的定時任務可能是不必要的,因為服務器可能并沒有新數據,還是返回了和上一次一樣的內容。 頁面內容可能不夠新,因為服務器可能剛更新了數據,但下一輪定時任務還沒有開始。

造成這些不足的原因歸結起來,主要還是由于服務器的響應總是被動的。HTTP協議限制了一次通信總是由客戶端發起請求,再由服務器端來返回響應。

因此,如果讓服務器端也可以主動發送信息到客戶端,就可以很大程度改進這些不足。WebSocket就是一個實現這種雙向通信的新協議。

WebSocket是基于HTTP的功能追加協議

WebSocket最初由html5提出,但現在已經發展為一個獨立的協議標準。WebSocket可以分為協議(Protocol)和API兩部分,分別由IETF和W3C制定了標準。

先來看看WebSocket協議的建立過程。

為了實現WebSocket通信,首先需要客戶端發起一次普通HTTP請求(也就是說,WebSocket的建立是依賴HTTP的)。請求報文可能像這樣:

GET ws://websocket.example.com/ HTTP/1.1Host: websocket.example.comUpgrade: websocketConnection: UpgradeOrigin: http://example.comSec-WebSocket-Key:pAloKxsGSHtpIHrJdWLvzQ==Sec-WebSocket-Version:13

其中HTTP頭部字段Upgrade: websocket和Connection: Upgrade很重要,告訴服務器通信協議將發生改變,轉為WebSocket協議。支持WebSocket的服務器端在確認以上請求后,應返回狀態碼為101 Switching Protocols的響應:

HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: nRu4KAPUPjjWYrnzxDVeqOxCvlM=

其中字段Sec-WebSocket-Accept是由服務器對前面客戶端發送的Sec-WebSocket-Key進行確認和加密后的結果,相當于一次驗證,以幫助客戶端確信對方是真實可用的WebSocket服務器。

驗證通過后,這個握手響應就確立了WebSocket連接,此后,服務器端就可以主動發信息給客戶端了。此時的狀態比較像服務器端和客戶端接通了電話,無論是誰有什么信息想告訴對方,開口就好了。

一旦建立了WebSocket連接,此后的通信就不再使用HTTP了,改為使用WebSocket獨立的數據幀(這個幀有辦法看到,見后文)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 湘乡市| 随州市| 海阳市| 盐亭县| 昌吉市| 西吉县| 富平县| 德格县| 开封市| 格尔木市| 疏勒县| 海丰县| 武宁县| 岱山县| 吕梁市| 治多县| 普兰店市| 车致| 托克逊县| 嘉荫县| 靖安县| 鄢陵县| 彰武县| 阜阳市| 宁河县| 江口县| 宝应县| 澜沧| 衡阳市| 卓资县| 田东县| 陇南市| 大姚县| 内丘县| 建宁县| 泰宁县| 合作市| 福建省| 乌拉特前旗| 菏泽市| 漳州市|