默认
发表评论 4
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] MobileIMSDK Server断开瞬间, iOS端发消息5条, 只收到2条应答回调
阅读(35902) | 评论(4 收藏 淘帖 1
问题描述:  MobileIMSDK Server断开瞬间, iOS端发送消息很多条消息, 这个时候收到的对方的应答消息会漏掉。
(即你发的消息对方有没有收到,以对方的消息应答为主,否则就表示没有收到)

只收到2条  发送消息未达到的。
NSLog(@"【DEBUG_UI】收到系统的未实时送达事件通知,当前共有%li个包QoS保证机制结束,判定为【无法实时送达】!",


NSLog(@"【DEBUG_UI】收到对方已收到消息事件的通知,fp=%@", theFingerPrint);Messages count]);
这个收到消息成功的也没有执行。

相当于: 客户端发送了5条消息, 只收到了2条发送失败的应答。 0条发送成功的应答。

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

标签:MobileIMSDK
上一篇:[已回复] 请教 MobileIMSDK 群聊接口、大文件上传下载接口下一篇:[已回复] MobileIMSD安卓端收到信息抛异常,可能是字符串过长,怎么解决?
推荐方案
评论 4
理论上不会发生这种情况,MobileIMSDK的客户端QoS送达保证队列算法原理非常简单:
该队列会保存你最近几分钟内发出的消息,只要没有收到对方的应答,这条消处就会重复重发直到超时(通过回调通知你已经lost了)。
所以,你怀疑的问题可以在客户端定位,跟对方或服务端都不会有关联。
你的log打印的不够全面,你按照我说的步骤来做。。。

打开客户端的debug选择:
[ClientCoreSDK setENABLED_DEBUG:YES];   然后把客户的详细log抓出来。

有一点要注意:
实际生产情况下,服务端挂掉属于非常严重的事故,出现的几率少之又少。

不过,我建议你可以仔细看一下MobileIMSDK的算法:
当客户端判定与服务端的网络已断开时,它会将这个重传定时器给关掉,直到下次连接上服务器上再次启动(也就是重传将在下次连接上服务器后继续进行,而不是武断地直接抛出lost回调)。这种方式是考虑到服务端断开的情况属于比较严重的体验危机,所以MobileIMSDK为了防止误判(比如只是偶尔的网络抖动、干扰等),把重传的机会留给了下次重连成功后。

我估计你看到的问题是上面的算法逻辑的结果,我建议你读读代码后再来看,时论上这个队列里的消息不可能无故消失,因为它足够简单,也就理所当然能保证:它要么还在队列里(只是暂停了计时—)、要么已经抛出。就是这样的。
另外再多问一句,你的MobileIMSDK版本是多少?
引用:JackJiang 发表于 2018-03-07 11:54
另外再多问一句,你的MobileIMSDK版本是多少?

最新的3.0版本
引用:cloverxie 发表于 2018-03-07 13:36
最新的3.0版本

最新版本是v3.2,你先升级一下版本后,再来抓log
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部