您好,登錄后才能下訂單哦!
今天小編給大家分享一下socketio一定要用在node中嗎的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
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
以上就是“socketio一定要用在node中嗎”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。