首頁  >  文章  >  web前端  >  socketio必須用在node嗎

socketio必須用在node嗎

WBOY
WBOY原創
2022-07-06 17:19:381496瀏覽

socketio必須用在node中;socketio是nodejs的一個函式庫,利用nodejs的函數封裝了一些功能,並且依賴nodejs的一些api,所以只能在nodejs中使用,socketio也是在客戶端和服務端之間建立的雙向通訊資料交換技術,底層使用EngineIO。

socketio必須用在node嗎

本文操作環境:Windows10系統、nodejs 16版、Dell G3電腦。

socketio必須用在node中

socketio是nodejs的一個函式庫,相當於別人利用nodejs的函式封裝了一些函式給你使用,依賴與nodejs的一些api,所以只能在nodejs下用。

SocketIO是在客戶端和服務端之間建立的雙向通訊資料交換技術,底層使用EngineIO。 SocketIO的的客戶端使用Engine.IO-Client,服務端使用Engine.IO實作。

擴充知識

SocketIO如何運作

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

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

客戶端

EIO Socket 透過一個 XHR (XMLHttprequest) 握手。前端發送一個 XHR,告訴服務端我要開始 XHR 長輪詢了。後端回傳的資料裡麵包括一個 open 標誌(數字 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 的作用就相當於 SESSION ID。

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

前端在發送第一個 XHR 的時候就開始了 XHR 長輪詢,這個時候如果有收發資料的需求,是透過長輪詢實現的。所謂長輪詢,是指前端發送一個 request,服務端會等到有資料需要返回時再 response. 前端收到 response 後馬上發送下一次 request。這樣就可以實現雙向通訊。

前端收到握手的upgrades 後,EIO 會偵測瀏覽器是否支援WebSocket,如果支持,就會啟動一個WebSocket 連接,然後透過這個WebSocket 往伺服器發一條內容為probe, 類型為ping 的數據。如果這時伺服器回傳了內容為probe, 類型為pong 的數據,前端就會把前面建立的HTTP 長輪詢停掉,後面只使用WebSocket 通道進行收發數據

EIO Socket 生命週期內,會間隔一段時間ping - pong 一次,用來測試網路是否正常。

socketio必須用在node嗎

這是 WebSocket 訊框的結構,綠色是發送,白色是接收。前面的數字是封包類型,2 是 ping, 3 是 pong, 42是 message

推薦學習:《nodejs影片教學

以上是socketio必須用在node嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:node能降級嗎下一篇:node能降級嗎