客户端意外挂掉,Server如何处理?

这个问题是最近棘手的问题。昨晚查了一下,竟然网上很多人问这个问题的解决方法。

Tcp通信中服务器处理客户端意外断开!

长期使人困惑的问题:TCP连接中断的实时检测(看起来像一篇论文,感觉比较靠谱)

tcp 服务端如何判断客户端断开连接

心跳机制tcp keepalive的讨论、应用及“断网”、"断电"检测的C代码实现(Windows环境下)(****排名第11名博主文章)

通过以上文章,博主结论为:采用heartbeat机制才检测客户端意外断开比较好。

----------------------------------------------------------------------------------

来个小插曲,与本主题无关,FIlezilla里面有个选项

客户端意外挂掉,Server如何处理?

可以选择实时速度,也可以选择显示平均速度。对我来说实时速度似乎更好些。

-----------------------------------------------------

开始与本主题有关的了,如下:

客户端意外挂掉,Server如何处理?

这个虽然上面写的是keepALIVE,但是事实上就是heartbeat。

好,我们检测一下FILEZILLA发送的周长时间是多少?

看了一下默认的时间大概是30秒(在进行文件传送的时候Filezilla也会发送heartbeat。)。

30秒有点长啊。交互一次,就有三条信息,也不算耗费资源,如下:

客户端意外挂掉,Server如何处理?

好,这时候如果我们断开服务器会咋样,

首先客户端会重发,如下:

客户端意外挂掉,Server如何处理?

重发的时间还挺有规律的啊,先是0.3秒,然后0.6秒,然后1.2秒,然后2.4秒,然后就不发了。

此时mesage log界面显示:

客户端意外挂掉,Server如何处理?