socket,断线重连问题

客户端和服务器通信,客户端断网,断电,服务端为什么无法自主检测到客户端掉线(不用心跳机制的情况下)。

阅读 7.1k
2 个回答

正常连接断开客户端会给服务端发送一个fin包,服务端收到fin包后才会知道连接断开。
而断网断电时客户端无法发送fin包给服务端,所以服务端没办法检测到客户端已经短线。
为了缓解这个问题,服务端需要有个心跳逻辑,就是服务端检测到某个客户端多久没发送任何数据过来就认为客户端已经断开,
这需要客户端定时向服务端发送心跳数据维持连接

楼上说的一点问题没,但是真正在实现过程中 其实是没必要这么复杂的,链接上websocket之后,维护一个链接,只需要每隔几秒给客户端发起一个心跳即可,如果连续发送三次都失败,则断开连接即可。
实现上最好不要让客户端一直的发送心跳,这样客户端如果写的不好,极易出问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题