socketio必須用在node中;socketio是nodejs的一個函式庫,利用nodejs的函式封裝了一些功能,並且依賴nodejs的一些api,所以只能在nodejs中使用,socketio也是在客戶端和服務端之間建立的雙向通訊資料交換技術,底層使用EngineIO。
本文操作環境:Windows10系統、nodejs 16版、Dell G3電腦。
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 一次,用來測試網路是否正常。
這是WebSocket 訊框的結構,綠色是發送,白色是接收。前面的數字是封包類型,2 是ping, 3 是pong, 42是message
推薦學習:《nodejs影片教學》
以上就是socketio必須用在node嗎的詳細內容,更多請關注本站其它相關文章!