-
创建时间
21年1月11日
-
最后回复
21年1月15日
- 11
回复
- 50
浏览
- 3
用户
- 3
链接
SDK 检测到网络恢复后是会自动重连的,目前的实现是在前 30 秒内会尝试重连 5 次(主要针对网络短时抖动),之后每 30 秒尝试重连一次,所以网络恢复后可能要等待 30 秒才会重新建立连接。另外控制台可以查看在线状态,通过查看在线状态可以确定是自动重连没有成功还是自动重连成功了但 onConnectionResume 没有被自动调用。
那请问我的java 后端怎么知道连接是否恢复了?有没有对应的通知消息?因为如果我的java SDK与leancloud 断开了连接,我的所有业务流程是没法进行的,所有我需要知道当前的长连接状态是正常的还是失败的?还有我想问一下
AVIMClient.setClientEventHandler(new AVIMClientEventHandler() {
@Override
public void onConnectionPaused(AVIMClient avimClient) {
System.out.println("链接中断");
}
@Override
public void onConnectionResume(AVIMClient avimClient) {
System.out.println("链接重新链接成功");
}
@Override
public void onClientOffline(AVIMClient avimClient, int i) {
System.out.println("客户下线");
}
});
其中 onConnectionPaused 这个回调里面的 AVIMClient 表示的是什么意思?是某个客户连接断开的回调嘛?AVIMClientEventHandler我的理解是这个回调应该是一个全局的回调,表示我的java后端与leancloud的连接状态 的回调。
就是通过 onConnectionResume 方法,像之前的回复中说的那样,onConnectionResume 没有被自动调用,可能是等待的时间不够长,也可能是其他问题,这需要您确认一下,是否网络恢复 30 秒后,控制台在线状态已经变为在线的情况下, onConnectionResume 仍然没有被调用。如果在上述情况下没有被调用,请提供 AppId、clientId、SDK 版本号,我们调查一下是什么原因导致的。
对于客户端应用来说,通常只有一个 AVIMClient(极少有聊天软件提供两个账号同时在线的双开功能),所以 SDK 设计的时候把这些放在了 AVIMClient 层面。
1、您好,请问您说的控制台是leancloud的网页后台吗?2、比如说我通过java sdk登录了两个AVIMClient,分别叫client1和client2,那么当我后台网络掉线的时候,public void onConnectionPaused(AVIMClient avimClient) {System.out.println("链接中断");} 这个方法会调用两次吗,每次调用的时候里面的AVIMClient参数分别是client1和client2吗?不知道我理解的对不对?
@Override public void onClientOffline(AVIMClient avimClient, int i) { System.out.println("客户下线"); } 这个回调和 onConnectionPaused 回调函数有什么区别?
[/quote]
是,控制台就是 LeanCloud 网页后台。
会被调用两次,参数分别是 client1、client2
onClientOffline 是应用配置了单点登录的情况下,在新设备上上线,把旧设备上登录的 client 踢下线。
7.1.0 有一些网络重连方面的修复,建议升级到最新版(目前是 7.1.1)再试试。
您好,我刚刚按照您说的把版本又更新了一下,可还是没有收到 onConnectionResume 的回调,麻烦您帮忙看一下,我们这边要上线了
AVIMClientEventHandler 有如下事件通知:
onConnectionPaused() 指网络连接断开事件发生,此时聊天服务不可用。
onConnectionResume() 指网络连接恢复正常,此时聊天服务变得可用。
onClientOffline() 指单点登录被踢下线的事件。
我刚按照您说的步骤进行复现,SDK 版本是 7.1.1,在 Android 设备中调试,客户端关闭 Wifi 即断开网络的时候,会回调 onConnectionPaused,当客户端 WiFi 再次打开,会正常回调 onConnectionResume。
AVIMClientEventHandler 的正确使用可以参考 Android 的 聊天 Demo 。
上面的 Demo 中,LCIMClientEventHandler 是您自定义的 AVIMClientEventHandler 名称。
然后在初始化时设置:
AVIMClient.setClientEventHandler(LCIMClientEventHandler.getInstance()); AVOSCloud.setRegion(AVOSCloud.REGION.EastChina);
AVOSCloud.setLogLevel(AVLogger.Level.DEBUG);
AVOSCloud.initialize(this.appId, this.appKey);
AVIMOptions.getGlobalOptions().setTimeoutInSecs(30);
AVConnectionManager manager = AVConnectionManager.getInstance();
manager.autoConnection();
manager.startConnection(new AVCallback() {
@Override
protected void internalDone0(Object o, AVException e) {
if (e == null) {
log.info("成功建立 WebSocket 链接");
} else {
log.info("建立 WebSocket 链接失败:" + e.getMessage());
}
}
});
AVIMClient.setClientEventHandler(ZxbClientEventHandler.getInstance());
AVIMMessageManager.setConversationEventHandler(new ZxbIntelConversationEventHandler());
AVIMMessageManager.registerDefaultMessageHandler(new ZxbIntelMessageHandler());
AVIMOptions.getGlobalOptions().setMessageQueryCacheEnabled(false);
-------------------------------handler 如下所示--------------------------------
package com.zbintel.zxb.service.imms.biz.handler;
import cn.leancloud.im.v2.AVIMClient;
import cn.leancloud.im.v2.AVIMClientEventHandler;
public class ZxbClientEventHandler extends AVIMClientEventHandler {
private static ZxbClientEventHandler eventHandler;
public static synchronized ZxbClientEventHandler getInstance() {
if (null == eventHandler) {
eventHandler = new ZxbClientEventHandler();
}
return eventHandler;
}
private ZxbClientEventHandler() {
}
private volatile boolean connect = false;
/**
* 是否连上聊天服务
*
* @return
*/
public boolean isConnect() {
return connect;
}
@Override
public void onConnectionPaused(AVIMClient avimClient) {
System.out.println("下线"+avimClient.getClientId());
}
@Override
public void onConnectionResume(AVIMClient avimClient) {
System.out.println("上线"+avimClient.getClientId());
}
@Override
public void onClientOffline(AVIMClient avimClient, int i) {
System.out.println("下线"+avimClient.getClientId());
}
}
您好,我的初始化方法如上所示,网络断开的时候可以接收到onConnectionPaused()方法的回调请求。然后我恢复网络,等了几分钟,一直没有接收到onConnectionResume()方法的回调。 麻烦看一下我的初始化代码是否存在问题。
如果是 Java 项目,初始化请参考Java 平台初始化代码文档。
您好,上面的代码就是按照你们提供的java 平台的代码实现的,麻烦帮忙看一下是否存在问题。


