261-Server端如何感知客户端的状态

Server端如何感知客户端的状态

如果网络拥塞严重,chatserver端如何感知客户端在线还是掉线了?

客户端主动发送close(fd),相当于TCP的四次挥手,发送FIN包,进行挥手操作,对应服务端,就有一个响应:recv=0(判断客户端掉线,下线了)
在这里插入图片描述
这是我们在局域网的聊天服务器里面,网络是良好的,是不会出现问题的。

但是,如果放在真实的网络环境中,这个客户端发送的FIN包有可能服务器根本收不到,因为真实的网络环境是非常非常复杂的,有可能现在我们的客户端到服务端的中间网络节点的路由器里面的报文非常多,网络拥塞非常严重,导致FIN包到达不了服务端。

TCP协议下,发送的每一个包都会去等待这个包的响应,如果没有响应,会超时重传,但是超时重传是有一定的次数,如果超过次数,TCP就会reset把socket重置了,但是还是导致这个FIN包最终还是没有到达服务端,导致这个客户端已经下线了,但是服务端并没有感知到,客户端已经自己重置了,服务端却一直以为这个客户端在线,把这个客户端所给的socketfd没有释放,相关的其他资源也没有释放,就积累越来越多的僵尸客户端连接。、

解决方法

心跳机制!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liufeng2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值