跳到主要内容
版本:2.1

常用插件

定义

命名空间:TouchSocket.Sockets
程序集:TouchSocket.dll

一、健康活性检验插件

健康活性检验插件(CheckClearPlugin)用于检测当前连接是否有正常的数据交流,如果没有,则主动断开连接。

该插件可以用于客户端或服务器,但是一般建议仅用于服务器即可。

工作原理非常简单。当连接建立时,会自动启动一个定时器,每隔一段时间(默认60秒),就会检验在该连接上,是否有数据交流。如果没有,则判定该客户端静默,或者已经无效。

例如:在Tcp场景中,经常有客户端因为断网等原因,已经断开连接,但是又无法主动发送断开连接报文。则此后,如果服务器不主动发送数据,则会非常久的时间无法得知该客户端已经断开。

所以需要使用该插件进行健康活性检验,以便及时断开无效连接。

代码示例:

只需要在插件中添加UseCheckClear即可。其中,可配置:

  • CheckClearType:健康检验类型,默认是所有类型都进行健康检验,即同时开启发送、接收健康检验,只要有一方有数据交互,即认为连接有效。
  • Tick:健康检验的间隔时间,默认是60秒。
  • OnClose:健康检验失败时的回调函数,默认是直接关闭连接。
.ConfigurePlugins(a =>
{
a.UseCheckClear()
.SetCheckClearType( CheckClearType.All)
.SetTick(TimeSpan.FromSeconds(60))
.SetOnClose((c,t) =>
{
c.TryShutdown();
c.SafeClose("超时无数据");
});
})
温馨提示

健康检验插件,可能因为操作系定时器原因和检验周期原因,导致检验时间间隔比配置的间隔时间要长。一般来说,最坏情况不会超过设置周期的10%。例如:设置周期为100秒,则最坏情况可能到110秒才会执行清理。