溫馨提示×

溫馨提示×

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

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

socketio一定要用在node中嗎

發(fā)布時間:2022-07-07 09:30:52 來源:億速云 閱讀:190 作者:iii 欄目:web開發(fā)

今天小編給大家分享一下socketio一定要用在node中嗎的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

socketio必須用在node中;socketio是nodejs的一個庫,利用nodejs的函數(shù)封裝了一些功能,并且依賴于nodejs的一些api,所以只能在nodejs中使用,socketio也是在客戶端和服務(wù)端之間建立的雙向通信數(shù)據(jù)交換技術(shù),底層使用EngineIO。

本文操作環(huán)境:Windows10系統(tǒng)、nodejs 16版、Dell G3電腦。

socketio必須用在node中

socketio是nodejs的一個庫,相當(dāng)于別人利用nodejs的函數(shù)封裝了一些功能給你使用,依賴與nodejs的一些api,所以只能在nodejs下用。

SocketIO是在客戶端和服務(wù)端之間建立的雙向通信數(shù)據(jù)交換技術(shù),底層使用EngineIO。SocketIO的的客戶端使用Engine.IO-Client,服務(wù)端使用Engine.IO實現(xiàn)。

擴(kuò)展知識

SocketIO如何工作

當(dāng)一個瀏覽器嘗試建立SocketIO時,SocketIO首先使用xhr-polling創(chuàng)建一個長輪詢。長輪詢一旦建立,它將升級為WebSocket連接。

SocketIO底層是使用EngineIO庫實現(xiàn)的,這個庫使用WebSocket和XMLHttprequest封裝了一套自己的Socket協(xié)議(暫時叫 EIO Socket)。一個完整的 EIO Socket 包括多個 XHR 和 WebSocket 連接.

客戶端

EIO Socket 通過一個 XHR (XMLHttprequest) 握手。前端發(fā)送一個 XHR,告訴服務(wù)端我要開始 XHR 長輪詢了。后端返回的數(shù)據(jù)里面包括一個 open 標(biāo)志(數(shù)字 0 表示), 以及sid 和 upgrades 字段,ping時間間隔,ping超時時間。

0{
“sid”: “8b7ab1ae-fbcf-4d23-8192-3c14a2a90721”,
“upgrades”: [
“websocket”
],
“pingInterval”: 10000,
“pingTimeout”: 60000
}

sid 是本次 EIO Socket 的會話 ID,因為一次 EIO Socket 包含了多個請求,而后端又會同時連接多個 EIO Socket,sid 的作用就相當(dāng)于 SESSION ID。

另一個字段 upgrades,正常情況下是 [‘websocket’],表示可以把連接方式從長輪詢升級到 WebSocket。

前端在發(fā)送第一個 XHR 的時候就開始了 XHR 長輪詢,這個時候如果有收發(fā)數(shù)據(jù)的需求,是通過長輪詢實現(xiàn)的。所謂長輪詢,是指前端發(fā)送一個 request,服務(wù)端會等到有數(shù)據(jù)需要返回時再 response. 前端收到 response 后馬上發(fā)送下一次 request。這樣就可以實現(xiàn)雙向通信。

前端收到握手的 upgrades 后,EIO 會檢測瀏覽器是否支持 WebSocket,如果支持,就會啟動一個 WebSocket 連接,然后通過這個 WebSocket 往服務(wù)器發(fā)一條內(nèi)容為 probe, 類型為 ping 的數(shù)據(jù)。如果這時服務(wù)器返回了內(nèi)容為 probe, 類型為 pong 的數(shù)據(jù),前端就會把前面建立的 HTTP 長輪詢停掉,后面只使用 WebSocket 通道進(jìn)行收發(fā)數(shù)據(jù)

EIO Socket 生命周期內(nèi),會間隔一段時間 ping - pong 一次,用來測試網(wǎng)絡(luò)是否正常。

socketio一定要用在node中嗎

這是 WebSocket 幀的結(jié)構(gòu),綠色是發(fā)送,白色是接收。前面的數(shù)字是數(shù)據(jù)包類型,2 是 ping, 3 是 pong, 42是 message

以上就是“socketio一定要用在node中嗎”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向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