服务端怎么知道客户端是否断开网络连接了?
假设我开了一个客户端链接 mysql server
(假设客户端在西部,服务器在东部,相隔几千公里),但是我直接一个 kill -9
杀死了这个客户端,此时 mysql server
会知道客户端死了吗?还是说要等到 timeout
时间才行?kill -9
杀死进程的时候,会用四次挥手告诉 mysql server
吗
再假设是默认的 kill
命令呢?
再假设是客户端机器直接一瞬间炸毁了,mysql server
可以知道断开链接了吗?还是说要等到 timeout
超时?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
断网肯定是没法发数据的,服务端会有超时关闭进程。
另外两种情况实际操作一下,就知道了。
exit:
kill:
先跟你讨论网络正常的情况下:
这个时候如果你
kill -9
杀死了客户端进程,服务端是能够被通知到断开连接的。不加
-9
也肯定也行了,你都能自己在退出时通知服务端。网络不正常的情况下:
服务端是无法被通知到的,这也是数据库死锁的来源之一,如果你的客户端进程还在,开启了一个事物,这时你的客户端网络突然断开了,服务端是收不到通知的,就形成了死锁,你可以自己测试一下,客户端开启事务,然后关闭wifi。
你自己的写的 socket 服务同理。
最保险的方式
最保险的方式,还是你自己使用心跳包的方式检测活动。
通常的做法是:
有3可以不用2了,双重保障才稳妥