默认
发表评论 12
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] MobileIMSDK网络掉线后,应用层如何处理?如何控制此时消息的发送?
异常断开im之后,如何在应用层重新发送心跳包。
集成MobileIMSDK之后,有的时候会出现
【IMCORE】收到服务端的“尚未登陆”的错误消息,心跳线程将停止,请应用层重新登陆.不知道具体是什么原因造成的。求助合理的解决这个问题呢


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

上一篇:MobileIMSDK有C# asp.net版吗?怎么搞?下一篇:[已回复] 如何使用MobileIMSDK开发消息推送系统?

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

推荐方案
评论 12
首先,MobileIMSDK网络掉线后,应用层不需要处理,它会自动进行重连。

但是,网络掉线的重连,是按几秒钟的频率进行重试的,如果你在这个时间间隔内(时间非常短),发送包,而因为没有重连成功服务端并没有session记录,服务就会发送“尚未登陆”这样的反馈,从而阻止未认证的非法包发送,防止攻击。

理论上,重连间隔内发送包有可能发生,但这么短的时间内,发生的几率非常小,如果你经常遇到,实际上那不太可能,或者是其它问题导致,也或者只是非常小的几率发生,而你觉得这个问题,从你的描述来看,看不出来具体情况。

所以,你需要明确几点:
1)在掉线到自动重连成功的时间差内,你再发送包,肯定是会有这种提示,包括手机qq或微信在内也是同样的情况,你应该在应用层直接提示“因网络原因没有发送成功,请稍后再试”这样类似的话。实践上来说,发生这样的几率非常小,一般情况下都是不会发生的,你可以去体验RainbowChat,看看它的表现就知道了。
2)这种情况发生的几率非常小,而且理论上是属于正常的状况,到底是很小几率发生,还是经常发生,你没有描述清楚。
3)如果发生这种情况,你应该在应用层给于友好的提示用于提醒用户。

综上,发生上述提示的原因也跟你讲清楚了,发生的几率你应该也能想到,你正确理解它相信就不会困惑了。
补充一下:如果是我写的话,应该是先判断 ClientCoreSDK.isConnectedToServer() 是否是true,是true才允许用户发送,不然就直给于提示“当前网络未连接,请稍后再重试”这样的提示。

当然具体你怎么处理,看你的逻辑了。

更重要的是,你的消息如果设置了QoS标识为true,即使在掉线后未成功登陆的时间间隙内发送消息,服务端也返回了这个“未登陆”的错误反馈,你不处理它也没有关系,因为这种情况下刚发的这条消息必然是无法送达到接收人的手中,也就自然不会有应答包过来,那么发送者接下来就会进行消息重发尝试,如果3次重发也没有收到,那么你本地是可以通过messageLost接口收到回调通知(通知你消息没有成功送达),那么你在界面上就可以通过这条消息的fingerPrint(也就是唯一id)在UI上标识这条消息未送成功,可以像qq一样在消息气泡旁边加一个“Error”样式的图标,用户也就自然知道没有发送成功了。

总结一下:最懒的处理方法就是,只要APP首次登陆成功后,无论何种情况下,你就放手让用户动漫sendData,根据MobileIMSDK的QoS机制,不管发生什么问题,只要消息没有发送成功,它会自动进行消息重发,假设经过3次重发后仍然不成功,那么QoS算法也会通过messageList回调接口告诉你,你通过这个回调拿到的fingerPrint(即消息id)来更新UI上消息列表的UI显示就行了(比如加一个错误小图标)。

以上不知我的描述你是否理解。
你为什么这么吊
签名: 日了日了日了日了日了
引用:JackJiang 发表于 2016-09-22 17:48
补充一下:如果是我写的话,应该是先判断 ClientCoreSDK.isConnectedToServer() 是否是true,是true才允许 ...

一时还不太理解,但有点思路了,我描述的不太清楚,因为我也没理解产生这个的具体原因。tks
签名: 该会员没有填写今日想说内容.
引用:AlexZhang 发表于 2016-09-22 18:54
一时还不太理解,但有点思路了,我描述的不太清楚,因为我也没理解产生这个的具体原因。tks

看我3楼的回复,你应该都能想到UI界面上该怎么处理了吧
引用:作者太屌了 发表于 2016-09-22 18:06
你为什么这么吊

好直白。。。。
引用:JackJiang 发表于 2016-09-22 19:07
看我3楼的回复,你应该都能想到UI界面上该怎么处理了吧

现在遇到这种情况,我手动把WIFi断开,然后重新打开之后,发消息之前判断了ClientCoreSDK.getInstance().isConnectedToServer(),然后就一直返回false,自动重连机制不能作用。
请问我该如何在后台去主动连接服务器吗?
签名: 该会员没有填写今日想说内容.
E/LocalUDPDataSender: 【IMCORE】本地网络不能工作,send数据没有继续!
E/ClientCoreSDK: 【IMCORE】【本地网络通知】检测本地网络已连接上了!
D/LocalUDPSocketProvider: 【IMCORE】正在closeLocalUDPSocket()...
D/LocalUDPSocketProvider: 【IMCORE】Socket处于未初化状态(可能是您还未登陆),无需关闭。
D/KeepAliveDaemon: 【IMCORE】心跳线程执行中...
D/LocalUDPSocketProvider: 【IMCORE】isLocalUDPSocketReady()==false,需要先resetLocalUDPSocket()...
D/LocalUDPSocketProvider: 【IMCORE】正在closeLocalUDPSocket()...
D/LocalUDPSocketProvider: 【IMCORE】Socket处于未初化状态(可能是您还未登陆),无需关闭。
D/LocalUDPSocketProvider: 【IMCORE】new DatagramSocket()中...
D/LocalUDPSocketProvider: 【IMCORE】new DatagramSocket()已成功完成.
D/KeepAliveDaemon: 【IMCORE】心跳线程执行中...
D/LocalUDPSocketProvider: 【IMCORE】isLocalUDPSocketReady()==true,直接返回本地socket引用哦。
D/KeepAliveDaemon: 【IMCORE】心跳线程执行中...
D/LocalUDPSocketProvider: 【IMCORE】isLocalUDPSocketReady()==true,直接返回本地socket引用哦。
E/ChatBaseEventImpl: 【DEBUG_UI】网络连接出错关闭了,error:-1
D/AutoReLoginDaemon: 【IMCORE】自动重新登陆线程执行中, autoReLogin?true...
D/LocalUDPSocketProvider: 【IMCORE】isLocalUDPSocketReady()==true,直接返回本地socket引用哦。
E/ClientCoreSDK: 【IMCORE】【本地网络通知】检测本地网络已连接上了!
D/LocalUDPSocketProvider: 【IMCORE】正在closeLocalUDPSocket()...
E/ClientCoreSDK: 【IMCORE】【本地网络通知】检测本地网络已连接上了!
D/LocalUDPSocketProvider: 【IMCORE】正在closeLocalUDPSocket()...
D/LocalUDPSocketProvider: 【IMCORE】Socket处于未初化状态(可能是您还未登陆),无需关闭。


这个是日志信息
签名: 该会员没有填写今日想说内容.
引用:AlexZhang 发表于 2016-09-22 20:52
E/LocalUDPDataSender: 【IMCORE】本地网络不能工作,send数据没有继续!
E/ClientCoreSDK: 【IMCORE】【 ...

你用截图把日志发上来,截图里把日志输出时间也给截出来!
连接成功后没有看到你客户发出心跳包,这就是为什么一会就掉线的原因!
你先把日志截图,一定要显示时间 !
感谢坛主
这个心跳断了之后就没再连上过,所以我想我应该怎么 去主动重新连接

QQ图片1.png (98.17 KB, 下载次数: 3241)

QQ图片1.png

QQ图片2.png (100.31 KB, 下载次数: 3041)

QQ图片2.png

QQ图片3.png (87.96 KB, 下载次数: 3073)

QQ图片3.png
签名: 该会员没有填写今日想说内容.
引用:AlexZhang 发表于 2016-09-23 10:02
包名抹去了感谢坛主
这个心跳断了之后就没再连上过,所以我想我应该怎么 去主动重新连接

前两张图很正常,但第3张图上登陆一次重连成功后,心跳包发出后服务端就再也没有收到过。。。

你能证明你的服务端网络是正常的吗?建议用ping工程连续ping个半小时,观察一下你手机和服务器的无线网络是否稳定,能否持续通信!android上的ping工具从这里下载:http://www.52im.net/thread-145-1-1.html
学习了,不错
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部