默认
发表评论 8
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教关于IM中服务端发送给客户端的离线消息可靠性问题
阅读(41173) | 评论(8 收藏 淘帖2 1
服务端发送给客户端如何确保客户端一定会收到,或者客户端收不到,服务端也能知道客户端收不到消息的问题

最近在做消息的离线处理,主要应用场景是当客户端上线时,服务端拉取客户端的离线消息并发送,但是此时客户端又因未知原因掉线了,客户端的在线状态只是一瞬间,服务端也把消息发出去了,但是客户端没收到(因为离线了),但是同时服务端又把数据库的离线消息给删了,请问大佬们如何解决这个问题,谢谢

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:IM开发
上一篇:我想问下,MobileIMSDK和openfire哪个比较好呢?下一篇:求教关于IM聊天系统中长连接的鉴权设计思路

本帖已收录至以下技术专辑

推荐方案
评论 8
离线消息和在线实时消息的概念一定不要混淆了,我看你的说的意思,好像这两个概念不清晰。

你可以告诉我:
1)你当前的离线消息是在什么时机下保存到服务端的?
2)客户端是在什么时机下去获取离线消息的?(获取方式是什么?是通过http主动拉取?)
当客户端A发消息到客户端B时,客户端B不在线,那么此时就会把消息存到数据库,这个在sdk里面有给方法叫
onTransBuffer_C2C_RealTimeSendFaild_CallBack
然后当客户端B上线时我通过服务端的一个叫onUserLoginAction_CallBack的方法,把数据库的消息发往客户端B
然后删除数据库的内容
@JackJiang 所以说,我并不是客户端主地拉取离线消息,而且服务端检测到客户端上线,然后往数据库里面查有没有这个客户端的离线消息,有就往这个客户端发,没有就不做任何操作
引用:wzq1915414095 发表于 2019-08-06 15:19
@JackJiang 所以说,我并不是客户端主地拉取离线消息,而且服务端检测到客户端上线,然后往数据库里面查有 ...

你的意思是,客户端的离线消息不是通过http自已主动拉取,而你服务端通过im长连接通道推过来的?
引用:JackJiang 发表于 2019-08-06 16:05
你的意思是,客户端的离线消息不是通过http自已主动拉取,而你服务端通过im长连接通道推过来的?

是的,而且即使使用http还是有这个可靠性的问题吧?
引用:wzq1915414095 发表于 2019-08-06 16:10
是的,而且即使使用http还是有这个可靠性的问题吧?

首先,按照现在主流的技术实现,都是使用http拉,这个好处太多了,具体参考这篇文章《IM消息送达保证机制实现(二):保证离线消息的可靠投递》。

另外,你认为用Http也会发生这种情况?是的,这种方法同样不会百分之百保证,但包括QQ在内,IM的设计原则都有“万有一失”这个原则,必竟聊天消息并不是金融数据,理论上的百分百意义不大。

另外,如果你真的要保证百分百,也很容易,你可以在拉取完成后,客户端再次发起一个确认请求,服务端此时再来删除,这就肯定能百分之百。
引用:JackJiang 发表于 2019-08-06 16:14
首先,按照现在主流的技术实现,都是使用http拉,这个好处太多了,具体参考这篇文章《IM消息送达保证机制 ...

好的,非常感谢
引用:wzq1915414095 发表于 2019-08-06 16:56
好的,非常感谢

不客气
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部