常見問題
以下是關於 Socket.IO 的常見問題清單
有些東西無法正常運作,請幫忙?
請查看 疑難排解指南。
它在幕後如何運作?
Socket.IO 連線可以使用不同的低階傳輸建立
- HTTP 長輪詢
- WebSocket
- WebTransport
Socket.IO 會根據下列情況自動選擇最佳可用選項
您可以在 "運作方式" 區段 中找到更多詳細資訊。
Socket.IO 相較於一般 WebSocket 提供了哪些功能?
WebSocket 真是太棒了!不,真的。它們提供了一種有效率的方式,可以在客戶端和伺服器之間傳輸資料。其中優點包括
- 您不需要依賴定期輪詢從伺服器擷取資料
- 您不需要在將資料傳送至伺服器時重複傳送所有 HTTP 標頭
這讓它們非常適合低延遲且資料密集的應用程式,例如遊戲、聊天、協作解決方案...
話雖如此,WebSocket 也相當低階,而使用 WebSocket 開發即時應用程式通常需要在其上額外增加一層
- 備援至 HTTP 長輪詢,以防無法建立 WebSocket 連線
- 自動重新連線,以防 WebSocket 連線關閉
- 確認,傳送一些資料並期待另一方回應
- 廣播至所有或部分已連線的客戶端
- 擴充至伺服器的多個執行個體
- 連線復原,針對短暫的斷線期間
您可能已經猜到了,此額外層是由 Socket.IO 函式庫實作的。
什麼是 WebTransport?
簡而言之,WebTransport 是 WebSocket 的替代方案,它修正了困擾 WebSocket 的幾個效能問題,例如 佇列頭端封鎖。
如果您想要進一步瞭解這個新的網頁 API(已於 2022 年 1 月包含在 Chrome 中,並於 2023 年 6 月包含在 Firefox 中),請查看這些連結
- https://w3c.github.io/webtransport/
- https://developer.mozilla.org/en-US/docs/Web/API/WebTransport
- https://developer.chrome.com/articles/webtransport/
Socket.IO 中未預設啟用對 WebTransport 的支援,因為它需要安全環境(HTTPS)。如果您想要使用 WebTransport,請查看 專屬教學。
Socket.IO 會儲存訊息嗎?
Socket.IO 伺服器不會儲存任何訊息。
您的應用程式有責任將這些訊息持續儲存在 某處,以供目前未連線的客戶端使用。
話雖如此,如果你啟用 連線狀態復原功能,Socket.IO 會暫時儲存訊息。
Socket.IO 的傳遞保證是什麼?
Socket.IO 保證訊息順序,無論使用哪種低階傳輸(即使在兩種傳輸之間切換時)。
此外,Socket.IO 預設提供 最多一次 的傳遞保證(也稱為「發射後便忘記」),這表示在某些情況下,訊息可能會遺失,且不會嘗試重試。
有關此項的更多資訊,請參閱 這裡。
如何識別特定使用者?
Socket.IO 中沒有使用者的概念。
你的應用程式有責任將特定 Socket.IO 連線連結到使用者帳戶。
對於 Node.js 應用程式,你可以例如
可以在哪裡找到變更日誌?
請參閱此處。