首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
心跳检测时间间隔之间会丢消息怎么处理?
问题描述: 比如我客户端与服务端心跳时间是10秒,轮回检测心跳时间是5秒。 存在客户端A和B,连上服务端后,都形成心跳机制。此时收发信息正常。 如果我A客户端操作关闭网络(注意不是关闭socket服务),那么服务端需要通过心跳机制检测A客户端的离线状态。在检测这段时间,服务端看到A是在线的,此时B发送消息,A接收不到,并且也没有保存离线消息(因服务端看到A是在线的),这样会导致消息的丢失,此时如何处理呢?
发布于5年前 · 2 次浏览 · 来自
提问
R
Rain
问题描述: 比如我客户端与服务端心跳时间是10秒,轮回检测心跳时间是5秒。 存在客户端A和B,连上服务端后,都形成心跳机制。此时收发信息正常。 如果我A客户端操作关闭网络(注意不是关闭socket服务),那么服务端需要通过心跳机制检测A客户端的离线状态。在检测这段时间,服务端看到A是在线的,此时B发送消息,A接收不到,并且也没有保存离线消息(因服务端看到A是在线的),这样会导致消息的丢失,此时如何处理呢?
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2019-04-12
呼
呼吸的悲剧
如果要实现消息的高可靠性,那需要将所有消息进行持久化存储。不能依赖 `TCP` 连接,因为连接是不稳定的。随时可能会发生断线和重连。 客户端与服务器进行消息接收确认,当客户端向服务器发送消息确认接收的数据包时,服务器才将持久存储中的消息删除,或修改为已接收的状态。 当客户端发生断线时,消息依然在服务器端的存储中。客户端重新上线后,服务器端将未发送成功的消息重新进行发送。 每个消息都应当有编号,客户端需要保存一份最近的消息`ID`,防止服务器发送重复的消息。
赞
0
回复
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。