定义一种私有IM协议,该怎样设计好“失败重试”机制
这个事情交给客户端做比服务器端简单。
一个简单的方法,
1。 用序列号去标记每一条消息(4Byte?),per-会话,也就是每一对或者每个群组一个唯一标识
2。接收端收到消息后,应用层回复一个已收到
3。发送端在未收到应用层回复已收到以前,不删除,且重发N次*timer1,如果超时则把消息标记为“未确认收到”,停止重发
4。接收端过滤,收到一个消息后,在某一个时间范围内进行对比(N*timer1*m),如果发现重复消息,则不显示
在服务器做要保持很多消息状态,且在失败后无法通知发送者。
【定义一种私有IM协议,该怎样设计好“失败重试”机制】 另外,端到端加密也能做到用户隐私保护,服务器完全不知道消息。
■网友
后台架设接入网关,接入网关负责每一个用户的接入session,在这一层做网络数据包的过滤,可以叫做接入层协议,协议内带有package id,如果这个package id对于这个用户已经是处理过,就直接丢弃,否则解包得到具体的业务协议,然后把业务协议发送到对应的业务处理服务器。id采用整型,由客户端决定初始值,自增。
■网友
一个用户,给另一个用户,发任何信息,都会保存一个本地自增ID。发信息时,把该ID也发过去。对方检查该ID是否连续就可以保证不乱序,不丢失。
■网友
每一个消息要有ID,然后消息有回执,就不会发生重发的情况了。TCP本身是有重发,但是网络总是很复杂的,需要再加重发来提高消息成功率。
■网友
泻药。这种一般倾向于不解决,这种重复的几率很小,就算重复了在聊天场景下一般也没什么问题。非得用技术手段,只存最近一条消息的id是可以的,当然也可以算最近发送消息的哈希值,如果客户端不能保证id不变的话。PS:现在即时通讯云市场辣么成熟都成红海了,还几乎免费,为啥还要养团队自己搞?
推荐阅读
- 月季花|月季花长花苞后,及时给它施一种肥,不然影响正常开花
- 为啥知乎上普便有一种【我在北上广深打工,所以拥有更好的视野】这样的错觉
- 为啥电器实体店的价格比淘宝贵那么多
- 莫让美育体育成为另一种竞争焦虑
- 怎样评价聚美优品私有化
- 车市百晓生|拥出众实力方能定义市场 试驾吉利星瑞
- 被人围攻是怎么样一种体验,包括但不限于(蛋糕,口舌,拳脚,西瓜刀,机枪,code review)
- 计算机科学学到博士是一种怎么样的体验
- 环球车讯网|软件能否定义汽车
- Tensorflow 中咋定义自己的层呢
