默认
发表评论 7
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] MobileIMSDK中发现给刚下线的对方发消息,服务端不会立即走离线回调
我今天发现一个问题,安卓UDP在线,退出APP,然后这个时候,另外一台设备给他发消息,会导致服务器不会触发onTransferMessage_RealTimeSendFaild这个方法,然后过几秒才发现前面那个APP已经离线,然后这个时候再发,才会触发 onTransferMessage_RealTimeSendFaild这个方法

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

上一篇:[已回复] 什么时候搞一个C#的 mobileIMSDK客户端试试

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

推荐方案
评论 7
客户端正常下线的时候应该主动sendLoginout()告诉服务端正常断开连接,这样服务端就能立即获知客户端已下线,否则的话就相当于你客户端非正常退出,服务端只能等到心跳超时时间到来后才能感知到,tcp协议是没有办法通过别的办法感知连接被断开的
引用:JackJiang 发表于 2025-04-17 19:44
客户端正常下线的时候应该主动sendLoginout()告诉服务端正常断开连接,这样服务端就能立即获知客户端已下线 ...

好的,那有没有什么办法解决,因为app是可以杀死的,没法走sendLoginout,所以中间会存在心跳延迟,后端哪里可以解决这个问题吗
引用:921124136 发表于 2025-04-18 14:06
好的,那有没有什么办法解决,因为app是可以杀死的,没法走sendLoginout,所以中间会存在心跳延迟,后端 ...

被强行杀死那没有没办法,哪个app都一样。不过从产品的角度来说,你聊天的时候又不是跟对方面对面盯着对方的手机看着他的app被杀掉,然后掐着秒表看着对方发出消息。。。。真实产品情况下,这种极情况下的几秒超时延迟,完全没有什么问题,因为接收者这边并不会感知到有什么异常,又不是火箭上天,几秒误差没什么大不了的,必竟聊天就是人说话,隔几秒再听到,能有啥问题
引用:JackJiang 发表于 2025-04-18 14:20
被强行杀死那没有没办法,哪个app都一样。不过从产品的角度来说,你聊天的时候又不是跟对方面对面盯着对 ...

这样好像会造成 聊天数据丢失,我不想让每一条数据丢失,这种情况 是概率性发送的,如果真的正在给对方发消息,刚好他把app杀死,消息是发出去了,但是对方没接收到,后台也没走 onTransferMessage_RealTimeSendFaild ,这就会产生 漏洞,如果用户量 多了,迟早会出现这个现象,所以jack哥,有没有其他方案,我不是很了解怎么杜绝这个问题
引用:921124136 发表于 2025-04-19 11:21
这样好像会造成 聊天数据丢失,我不想让每一条数据丢失,这种情况 是概率性发送的,如果真的正在给对方发 ...

不可能丢失,这类消息会在这个接口的回调里通知应用层(你应用层自已存离线消息就好了):具体是MessageQoSEventListenerS2Cvoid messagesLost(java.util.ArrayList<Protocal> lostMessages)回调方法,你可以在服务端demo的代码输出的log里注意一下就能看到这些消息有没有被通过回调通知你了
引用:JackJiang 发表于 2025-04-19 18:35
不可能丢失,这类消息会在这个接口的回调里通知应用层(你应用层自已存离线消息就好了):具体是MessageQ ...

好的jack哥
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部