TsgcWebSocketClient | 保持客户端连接开启

客户端连接到服务器后,有时可能因信号差、连接错误等原因导致连接断开。有 2 个属性可帮助保持连接活跃。

 

HeartBeat

HeartBeat 属性允许您 每 X 发送一次 Ping保持连接活跃。 某些服务器在对等方之间无数据交换时会关闭 TCP 连接。HeartBeat 通过在特定间隔发送 ping 来解决此问题。通常这足以维持连接活跃,但如果希望在 X 秒内未收到服务器响应时关闭连接,可以设置 TimeOut 间隔。

 

示例: 每 30 秒发送一次 ping


oClient := TsgcWebSocketClient.Create(nil);
oClient.HeartBeat.Interval := 30;
oClient.HeartBeat.Timeout := 0;
oClient.HeartBeat.Enabled := true;
oClient.Active := true;

有一个名为 OnBeforeHeartBeat 的事件,允许自定义 HeartBeat 行为。默认情况下,若启用了 HeartBeat,客户端将每隔 HeartBeat.Interval 属性设定的 X 秒发送一个 WebSocket ping。

OnBeforeHeartBeat 有一个名为 Handled 的参数,默认值为 false,表示流程由 TsgcWebSocketClient 组件控制。如果将该值设为 True,则不会发送 ping,您可以使用 Connection 类发送自定义消息。

 

WatchDog

如果启用了 WatchDog,当客户端检测到断开连接时,WatchDog 会每隔 X 秒尝试重新连接,直到连接恢复活跃。

 

示例:断开连接后每隔 10 秒重新连接一次,尝试次数不限。

 


oClient := TsgcWebSocketClient.Create(nil);
oClient.WatchDog.Interval := 10;
oClient.WatchDog.Attempts := 0;
oClient.WatchDog.Enabled := true;
oClient.Active := true;

您可以使用 OnBeforeWatchDog 事件来更改客户端将尝试连接的服务器。示例:经过 3 次重试后,如果客户端无法连接到某台服务器,它将尝试连接到备用服务器。

Handled 属性若设为 True,表示客户端不会尝试重新连接。