日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

為什么網(wǎng)頁(yè)游戲可以與服務(wù)器實(shí)時(shí)通訊?Websocket實(shí)時(shí)通信基礎(chǔ)

為什么網(wǎng)頁(yè)游戲可以與服務(wù)器實(shí)時(shí)通訊?Websocket實(shí)時(shí)通信基礎(chǔ)

文章圖片

為什么網(wǎng)頁(yè)游戲可以與服務(wù)器實(shí)時(shí)通訊?Websocket實(shí)時(shí)通信基礎(chǔ)

大家日常生活中在使用網(wǎng)頁(yè)瀏覽器玩小游戲時(shí) , 不知道有沒有想過(guò) , 為什么網(wǎng)頁(yè)游戲可以實(shí)時(shí)地跟服務(wù)器通訊?搞技術(shù)的小伙伴應(yīng)該聽說(shuō)過(guò)websocket , 在介紹websocket之前 , 我們需要先了解HTTP 。
HTTP全稱超文本傳輸協(xié)議 , 常見的就是瀏覽器瀏覽網(wǎng)頁(yè)(瀏覽器和網(wǎng)頁(yè)服務(wù)器通訊) , HTTP具備以下基本特性:
①短鏈接 , 客戶端(瀏覽器)向服務(wù)器發(fā)起一次連接請(qǐng)求 , 服務(wù)器解析后給出回執(zhí)報(bào)文 , 交互完成后 , 客戶端或者服務(wù)器主動(dòng)斷開連接 。
②應(yīng)用層協(xié)議 , 所有的數(shù)據(jù)傳輸過(guò)程由客戶端發(fā)起 , 服務(wù)端不主動(dòng)發(fā)數(shù)據(jù) , 有如下過(guò)程:
? 建立連接:客戶端與服務(wù)器之間建立連接 。
? 發(fā)送請(qǐng)求:客戶端向服務(wù)器發(fā)送請(qǐng)求 。
? 處理請(qǐng)求:服務(wù)器接收到請(qǐng)求后 , 根據(jù)請(qǐng)求中的信息找到相應(yīng)的資源 , 執(zhí)行相應(yīng)的處理操作 。
? 發(fā)送響應(yīng):服務(wù)器將處理后的結(jié)果封裝在響應(yīng)中 , 并將其發(fā)送回客戶端 。
? 關(guān)閉連接:在完成請(qǐng)求—響應(yīng)周期后 , 客戶端和服務(wù)器之間的連接可以被關(guān)閉 。
可見 , 在HTTP中如果想持續(xù)地從服務(wù)器獲取數(shù)據(jù) , 必須要持續(xù)地發(fā)起請(qǐng)求 。
場(chǎng)景舉例:
某一智能家居系統(tǒng)的用于數(shù)據(jù)采集的中樞網(wǎng)關(guān)配備了一個(gè)網(wǎng)頁(yè)監(jiān)控界面 , 遠(yuǎn)程登錄可以訪問(wèn)家中的家居設(shè)備 。 某次 , 當(dāng)你遠(yuǎn)程登錄界面后 , 想要開啟空氣凈化器 , 并持續(xù)觀察家中的PM2.5指數(shù) , 由于進(jìn)化過(guò)程時(shí)間比較長(zhǎng)超過(guò)1h , 要想實(shí)時(shí)監(jiān)測(cè) , 如果按照正常HTTP協(xié)議的交互邏輯 , 可以使用定時(shí)請(qǐng)求(輪詢)的方式 , 可以獲取數(shù)據(jù) 。 但是 , 如果此時(shí)你家還有其他人想要查看 , 如果你的家人有100個(gè) , 此時(shí)中樞網(wǎng)關(guān)服務(wù)器多半得喊救命 , 因?yàn)檫^(guò)多得“連接-請(qǐng)求-回復(fù)-斷開”過(guò)程需要服務(wù)器不停得申請(qǐng)和釋放空間 , 不停得建立soket , 導(dǎo)致服務(wù)器大量時(shí)間被請(qǐng)求占用 , 瞬間提高服務(wù)器壓力 , 為了解決此問(wèn)題 , 有了websocket 。
Websocket的簡(jiǎn)單理解就是在HTTP的基礎(chǔ)上:
* 連接后除非使用代碼或者手動(dòng)斷開 , 否則不斷開 。
* 服務(wù)器可以主動(dòng)下發(fā)消息 , 無(wú)需客戶端再次請(qǐng)求 。
Websocket通訊過(guò)程
Websocket通訊過(guò)程有以下幾個(gè)階段:
①建立連接(握手) , 使用HTTP請(qǐng)求 。

【為什么網(wǎng)頁(yè)游戲可以與服務(wù)器實(shí)時(shí)通訊?Websocket實(shí)時(shí)通信基礎(chǔ)】包含關(guān)鍵的header:
* Connection: Upgrade
* Upgrade: websocket
* Sec-WebSocket-Key: afmbhhBRQuwCLmnWDRWHxw==
其中“Connection: Upgrade” , “Upgrade: websocket”兩個(gè)字段代表協(xié)議升級(jí)為wensocket , “Sec-WebSocket-Key: afmbhhBRQuwCLmnWDRWHxw==”類似登錄碼 , 用于客戶端和服務(wù)器的連接驗(yàn)證 。
②服務(wù)器握手響應(yīng):

握手響應(yīng)中最重要的部分就是:“Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=”此值根據(jù)Sec-WebSocket-Key和“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”拼接后按照SHA1編碼 , 將結(jié)果再進(jìn)行BASE64編碼便可以得到“Sec-WebSocket-Accept” 。
③通訊過(guò)程
此過(guò)程可以參考
“https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API/Writing_WebSocket_servers” ,
此處不過(guò)多贅述 , 僅需要注意下圖websocket數(shù)據(jù)幀格式 。


④關(guān)閉連接
在websocket中有一個(gè)單獨(dú)的位“FIN”標(biāo)記斷開連接 , 任何一方均可斷開連接 。
【福利】藍(lán)牙+Wi-Fi模塊王炸福利!免費(fèi)送樣?

    推薦閱讀