设计目标

让上层逻辑开发者不用关注断线重连。

原理

核心原理

服务器会缓存一定量的发给客户端的消息,当客户端重连上来是,服务器会把丢失的消息补发给客户端。在客户端的视角看来,服务器发给客户端的消息并没有丢失,所以不用同步刷新服务器的状态。

断线检测机制

网络错误

当网络层在发送或接收消息时,在调用SocketAPI的时候发生错误,即认为断线发生。这种方式可以检测出服务器主动关闭socket连接或客户端网络环境发生切换是引起的断线。

心跳超时

客户端会定时给服务器发送心跳消息,到超过一定时间没有获得回应,即认为断线发生。

断线类型

小断线

客户端断线重连上服务器后,服务器上面的缓存消息可以补发断线期间丢失的消息,故客户端基本无感知。

大断线

客户端断线重连上服务器后,服务器上面的缓存消息无法补发断线期间丢失的消息,会通知客户端网络错误,强制客户端走重新登录流程。故客户端的感知是被踢到登录界面。

注意事项

小断线期间,客户端发往服务器的消息是丢失的。所以客户端在书写和服务器交互的代码是,一定要遵守一个原则,即服务器正常返回时客户端再做表现,这样可以规避许多问题。在小断线期间,客户端的操作是没有反应是可以被接受的。