默认
发表评论 6
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 求助MobileIMSDK开发的IM中,一方退到后台,另一方可能会出现发送失败的疑问
阅读(44420) | 评论(6 收藏 淘帖1
两个用户正在聊天,一方返回后台或者退出,另一方这时发送信息,发送中会等待比较久,然后提示发送失败,过一会再发送就正常

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

标签:MobileIMSDK
上一篇:[已回复] 求教MobileIMSDK是否适合用在实时群组位置共享的场景下?下一篇:[已回复] 求助Xcode打包libMobileIMSDK4iX_common.a报错

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

推荐方案
评论 6
你说的现象,是算法逻辑范围内的情况,不是bug。

理论上:原因是,对方退到后台时,被系统挂起,对于服务端来说,它相当于非正常退出,而服务端并不知道,在服务端的会话超时到来前(这个时间默认是10秒),如果恰好在这个时间窗口发送消息,会认为对方在线,等对方应答包过来,而实际对方不会在线,那么就会出现发送方这边收到发送失败提示。

实际产品中:两个人聊天,其实人的手速和语速并不会太快,聊天消息恰好落在这个10秒窗口内的概率很小,另一个,当发送方的QoS重传次数到达极限前,可能服务端的超时就已经知道了对方超时退出,而这条消息也就会自动作为离线消息存储到服务端。

纸上谈兵式的暴力测试:开发的时候,可能会故意在这个时间窗口模拟一下子发送很多消息,那是有可能多条消息都会提示失败。但实际的产品中,谁这么聊天,要么那个人是机关枪,要么就是专门骚扰人的,消息失败就让它失败,无所谓。

总之:对于MobileIMSDK的算法(或者很多其它im的算法)来说,QoS送达保证机制的主要目的是:保证消息不会凭空消息(送达还是未送达),所以,即使你说的这种现象,它也算是明确告诉你消息未送达,而不是出现消息黑洞,这算法也是完整、合格的。


引用:JackJiang 发表于 2020-03-06 19:41
你说的现象,是算法逻辑范围内的情况,不是bug。

理论上:原因是,对方退到后台时,被系统挂起,对于服 ...

我现在返回后台,主动退出im登录,app打开后重新登录;如果大量用户使用,这样会有问题吗
引用:Elley 发表于 2020-03-07 15:03
我现在返回后台,主动退出im登录,app打开后重新登录;如果大量用户使用,这样会有问题吗

你这句:“我现在返回后台,主动退出im登录,app打开后重新登录;如果大量用户使用,这样会有问题吗”

》要么是你没理解我说的,要么是我没理解你说的。。。
引用:JackJiang 发表于 2020-03-07 16:15
你这句:“我现在返回后台,主动退出im登录,app打开后重新登录;如果大量用户使用,这样会有问题吗”

...

我的意思说,为了解决这个问题,当app 返回后台的时候,退出IM登录,app打开的时候,重新登录IM;这样会有问题吗
引用:JackJiang 发表于 2020-03-06 19:41
你说的现象,是算法逻辑范围内的情况,不是bug。

理论上:原因是,对方退到后台时,被系统挂起,对于服 ...

正确的系统不应该这么设计吧,应该是服务器充当中间者角色,当发送方发送后,到达服务器就应该是认为发送成功了,然后等待接收方上线后服务器再发给发送方即可
引用:麦峰强 发表于 2020-04-25 11:20
正确的系统不应该这么设计吧,应该是服务器充当中间者角色,当发送方发送后,到达服务器就应该是认为发送 ...

MobileIMSDK 从v5.0后,就是你说的这种逻辑了,你可以去看一下。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部