TsgcWebSocketClient › 属性 › WatchDog
在意外断开连接后自动重新连接到服务器。
property WatchDog: TsgcWSWatchDogClient_Options read FWatchDog write SetWatchDog;
Enabled=False, Interval=10, Attempts=0, Backoff=wdbFixed, BackoffMultiplier=2.0, MaxInterval=0, Jitter=0
当 WatchDog.Enabled 为 True 时,客户端检测到连接断开后,每隔 Interval 秒尝试重新连接。Attempts 控制最大重连次数,设为零表示无限重试。使用 OnBeforeWatchDog 事件可自定义重连流程,例如切换到备用服务器,或通过将 Handled 设为 True 来取消重试。
重连尝试之间的延迟可以呈指数增长,而不是保持固定。Backoff 选择策略:wdbFixed(默认值)在每次尝试之间等待 Interval 秒,而 wdbExponential 会在每次尝试失败后将延迟乘以 BackoffMultiplier(默认 2.0),从 Interval 开始。MaxInterval 以秒为单位限制计算出的延迟(0 表示无上限)。Jitter 为延迟添加一个 0 到 1 之间的随机因子(例如 0.2 会使每次延迟最多变化 ±20%),可防止大量客户端在服务器重启后于完全相同的时间重连;将 Jitter 设置为大于零的值时,即使 Backoff 为 wdbFixed,退避引擎也会启用。一旦连接建立,尝试计数器就会重置。
oClient := TsgcWebSocketClient.Create(nil);
oClient.WatchDog.Interval := 10;
oClient.WatchDog.Attempts := 0;
// exponential backoff: 10, 20, 40... up to 300 seconds, with 20% jitter
oClient.WatchDog.Backoff := wdbExponential;
oClient.WatchDog.MaxInterval := 300;
oClient.WatchDog.Jitter := 0.2;
oClient.WatchDog.Enabled := true;
oClient.Active := true;