大家日常生活中在使用網(wǎng)頁瀏覽器玩小游戲時不知道有沒有想過為什么網(wǎng)頁游戲可以實(shí)時的跟服務(wù)器通訊,搞技術(shù)的小伙伴應(yīng)該聽說過websocket協(xié)議,講websocket協(xié)議之前需要先講HTTP協(xié)議。
http協(xié)議全稱超文本傳輸協(xié)議,常見的就是瀏覽器瀏覽網(wǎng)頁(瀏覽器和網(wǎng)頁服務(wù)器通訊),http協(xié)議具備以下基本特性:
短鏈接:客戶端(瀏覽器)向服務(wù)器發(fā)起一次連接請求,服務(wù)器解析后給出回執(zhí)報文,交互完成后,客戶端或者服務(wù)器主動斷開連接
應(yīng)用層協(xié)議:所有的數(shù)據(jù)傳輸過程由客戶端發(fā)起,服務(wù)端不主動發(fā)數(shù)據(jù),有如下過程;
建立連接:客戶端與服務(wù)器之間建立連接。。
發(fā)送請求:客戶端向服務(wù)器發(fā)送請求。
處理請求:服務(wù)器接收到請求后,根據(jù)請求中的信息找到相應(yīng)的資源,執(zhí)行相應(yīng)的處理操作。
發(fā)送響應(yīng):服務(wù)器將處理后的結(jié)果封裝在響應(yīng)中,并將其發(fā)送回客戶端。
關(guān)閉連接:在完成請求-響應(yīng)周期后,客戶端和服務(wù)器之間的連接可以被關(guān)閉
可見,在HTTP中如果想持續(xù)的從服務(wù)器獲取數(shù)據(jù),必須要持續(xù)的發(fā)起請求,比如以下物聯(lián)網(wǎng)應(yīng)用場景案例:
某一智能家居系統(tǒng)的用于數(shù)據(jù)采集的中樞網(wǎng)關(guān)配備了一個網(wǎng)頁監(jiān)控界面,遠(yuǎn)程登錄可以訪問家中的家居設(shè)備,某次,當(dāng)你遠(yuǎn)程登錄界面后,想要開啟空氣凈化器,并持續(xù)觀察家中的PM2.5指數(shù),由于進(jìn)化過程時間比較長,超過1h,要想實(shí)時監(jiān)測,如果按照正常http協(xié)議的交互邏輯,可以使用定時請求(輪詢)的方式,可以獲取數(shù)據(jù),但是,如果此時你家還有其他人想要查看,如果你的家人有100個,此時,中樞網(wǎng)關(guān)服務(wù)器多半得喊救命,因?yàn)檫^多得“連接-請求-回復(fù)-斷開”過程需要服務(wù)器不停得申請和釋放空間,不停得建立soket鏈接,導(dǎo)致服務(wù)器大量時間被請求占用,瞬間提高服務(wù)器壓力,為了解決此問題,有了websocket協(xié)議。
Websocket協(xié)議的簡單理解就是在HTTP超文本傳輸協(xié)議鏈接的基礎(chǔ)上,實(shí)現(xiàn)以下兩點(diǎn):
* 連接后除非使用代碼或者手動斷開,否則不斷開;
* 服務(wù)器可以主動下發(fā)消息,無需客戶端再次請求;
Websocket協(xié)議通訊過程有以下幾個階段
包含關(guān)鍵的header:
* Connection: Upgrade
* Upgrade: websocket
* Sec-WebSocket-Key: afmbhhBRQuwCLmnWDRWHxw==
其中“Connection: Upgrade”,“Upgrade: websocket”兩個字段代表協(xié)議升級為wensocket,“Sec-WebSocket-Key: afmbhhBRQuwCLmnWDRWHxw==”類似登錄碼,用于客戶端和服務(wù)器的連接驗(yàn)證
握手相應(yīng)中最重要的部分就是:“Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=”此值根據(jù)Sec-WebSocket-Key和“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”拼接后按照SHA1編碼,將結(jié)果再進(jìn)行BASE64編碼便可以得到“Sec-WebSocket-Accept”,
(1) 此過程可以參考“https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API/Writing_WebSocket_servers”,此處不過多贅述,僅需要注意下圖websocket數(shù)據(jù)幀格式。
(1) 在websocket中有一個單獨(dú)的位“FIN”標(biāo)記斷開連接,任何一方均可斷開連接
更多關(guān)于websocket的知識可以參考以下鏈接
“https://blog.csdn.net/weixin_34124577/article/details/88039918”
“https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API/Writing_WebSocket_servers”
“https://blog.csdn.net/weixin_44772566/article/details/136717134”
今天的分享就到這里啦,EBYTE每一天都致力于更好的助力物聯(lián)化、智能化、自動化的發(fā)展,提升資源利用率,更多產(chǎn)品更多資料,感興趣的小伙伴可以登錄我們的億佰特官網(wǎng)進(jìn)行了解,也可以直接撥打400電話咨詢技術(shù)專員!
7 X 24 銷售服務(wù)熱線
4000-330-990深圳辦事處柯經(jīng)理:18218726658 杭州辦事處戴經(jīng)理:17512568697
常州辦事處崔經(jīng)理:15906110783 南京辦事處葛經(jīng)理:17626012283
業(yè)務(wù)郵箱:support@cdebyte.com
全國銷售投訴電話:19934352316
地址:四川省成都市高新西區(qū)西區(qū)大道199號B5棟(前臺座機(jī):028-61543675)
?? 成都億佰特電子科技有限公司【版權(quán)所有】 蜀ICP備13019384號-3