首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
心跳检测时间间隔之间会丢消息怎么处理?
问题描述: 比如我客户端与服务端心跳时间是10秒,轮回检测心跳时间是5秒。 存在客户端A和B,连上服务端后,都形成心跳机制。此时收发信息正常。 如果我A客户端操作关闭网络(注意不是关闭socket服务),那么服务端需要通过心跳机制检测A客户端的离线状态。在检测这段时间,服务端看到A是在线的,此时B发送消息,A接收不到,并且也没有保存离线消息(因服务端看到A是在线的),这样会导致消息的丢失,此时如何处理呢?
发布于7年前 · 2 次浏览 · 来自
提问
R
Rain
问题描述: 比如我客户端与服务端心跳时间是10秒,轮回检测心跳时间是5秒。 存在客户端A和B,连上服务端后,都形成心跳机制。此时收发信息正常。 如果我A客户端操作关闭网络(注意不是关闭socket服务),那么服务端需要通过心跳机制检测A客户端的离线状态。在检测这段时间,服务端看到A是在线的,此时B发送消息,A接收不到,并且也没有保存离线消息(因服务端看到A是在线的),这样会导致消息的丢失,此时如何处理呢?
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2019-04-12
呼
呼吸的悲剧
如果要实现消息的高可靠性,那需要将所有消息进行持久化存储。不能依赖 `TCP` 连接,因为连接是不稳定的。随时可能会发生断线和重连。 客户端与服务器进行消息接收确认,当客户端向服务器发送消息确认接收的数据包时,服务器才将持久存储中的消息删除,或修改为已接收的状态。 当客户端发生断线时,消息依然在服务器端的存储中。客户端重新上线后,服务器端将未发送成功的消息重新进行发送。 每个消息都应当有编号,客户端需要保存一份最近的消息`ID`,防止服务器发送重复的消息。
赞
0
回复