簡體   English   中英

非活動客戶端連接的 socket.io 服務器端超時?

[英]socket.io server-side timeout for inactive client connection?

我知道 socket.io 客戶端庫將關閉當前的 socket.io 連接(然后嘗試重新連接),如果它沒有定期收到對它發送到服務器的 ping 數據包的響應(假設連接有因某種原因死亡)。 並且,有用於控制這種重新連接行為的客戶端選項。

但是,如果客戶端處於非活動狀態並停止發送 ping 消息(比如因為客戶端進入睡眠狀態),服務器端會發生什么? 我在 socket.io 服務器端文檔中找不到任何信息來解釋這種情況或允許對其進行配置。 服務器是否會關閉不活動的客戶端 socket.io 連接(它沒有接收到來自 ping 消息的連接)? 如果是這樣,服務器將等待多長時間以及該行為是否可配置?

根據 socket.io 2.20 自述文件(截至 2020 年 1 月的最新版本):

“在 Engine.IO 級別實現了一種心跳機制,允許服務器和客戶端知道對方何時不再響應。

該功能是通過在服務器和客戶端上設置的計時器實現的,在連接握手期間共享超時值( pingIntervalpingTimeout參數)。”

因此,您可以通過在 socket.io 內的 engine.io 組件上設置以下超時屬性來配置服務器端和客戶端超時設置。

使用 socket.io 2.20 版:

const io = ...; // initialize socket.io how you wish
io.eio.pingTimeout = 120000; // 2 minutes
io.eio.pingInterval = 5000;  // 5 seconds

使用舊版本的 socket.io 同樣的事情:

const io = ...; // initialize socket.io how you wish
io.set('heartbeat timeout', 1200000);
io.set('heartbeat interval', 5000);

pingTimeout (Number): 多少毫秒沒有 pong 包考慮連接關閉 (60000)

pingInterval (Number): 發送一個新的 ping 包之前多少毫秒 (25000)

http://socket.io/docs/server-api/

https://github.com/socketio/engine.io#methods-1

在 socket.io 2.20 上。 這可以在初始化 socket.io 時設置

const io = require("socket.io")({pingTimeout: 10000, pingInterval: 30000});

在此處查看所有選項及其默認值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM