默认
发表评论 2
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 关于MobileIMSDK客户端间发送消息成功后服务器回调函数的疑问
客户端1向自己发送消息,客户端显示发送成功并且接收到了发送的消息,但服务器端显示调用了两个回调函数,一个是发送消息成功的,一个是发送消息失败的。请教怎么才能不调用发送消息失败的回调函数

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

标签:MobileIMSDK

QQ图片20171224143548.png (13.12 KB, 下载次数: 875)

QQ图片20171224143548.png
上一篇:[已解决] MobileIMSDK服务端主动推送消息至Android客户端该怎么实现?下一篇:[已解决] 用MobileIMSDK-Netty v3.1版做群聊时记录重复发送,求帮忙解决

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

推荐方案
评论 2
晚点详细回复你,这没有问题,只是你理解的不太对。
这两次回调都是合理的。

第一个回调:ServerEventListener.onTransBuffer_C2C_CallBack(..),就是你说的“发送成功”的回调,其实这个回调原本是没有的,也就是说,没有它整个MobileIMSDK的算法运转一点不受影响。

但假设没有这个回调的话,那么系统里该如何抓取每次用户向另一个用户发送的消息呢(也就是把用户的聊天记录保存下来,以便监控和分析用户的行为等),所以,这个回调的作用其实是给系统运营方“作弊”用的,就是可以偷偷把用户间发送的聊天消息等通这个回调收集下来,仅此而已,也就是你用不用这个回调并不会影系统的运行。理解了吗?

第二个回调:ServerEventListener.onTransBuffer_C2C_RealTimeSendFaild_CallBack(..),这个回调的作是,当用户A发送给用户B时,如果B不在线或者遇到任何其它问题(反正就是没有办法实时送达给用户B的情况)时,都会通知这个回调,那么应用层通过这个回调把没有实时送达成功的消息作离线存储起来,等到用户B下次上线时,也就不会丢消息了(相当于他下次上线时就可以把离线时的消息拉取出来,而这个离线消息就是通过这个回调里处理的)。

这第2个回调不能说发送失败时才调,准确的说是,只在无法实时送达给对方时(无法实时送达有很多可能性:对方可能不在线、也可能网络闪断了一一下、也可能遇到了什么突发异常等),就回通过这个回调过来,所以在这个回调里做离线存储就对了,从而确保不会丢消息。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部