重连机制与重连互踢
自动重连机制
SDK 内已实现自动重连机制,一旦连接成功,SDK 的重连机制将立即开始生效,并接管所有的重连处理。当因为网络原因断线时,SDK 内部会尝试重新建立连接,不需要您做额外的连接操作。
可能导致 SDK 断线重连的异常情况如下:
- 弱网环境:可能出现 SDK 不停重连的情况。因为客户端 SDK 和融云服务端之间存在连接保活机制,一旦因如果网络太差导致心跳超时,SDK 就会触发重连操作,尝试重连直到连接成功。
- 无网环境:SDK 的重连机制会暂停。一旦网络恢复,SDK 会进行重连操作。
一旦触发连接错误的回调,SDK 将退出重连机制。请根据具体的状态码自行处理。
重连时间间隔
SDK 尝试重连时,时间间隔逐次变大,分别是 0s, 0.25s, 0.5s, 1s, 2s, 4s, 8s, 16s, 32s。之后每 64s 重试一次。
当 APP 切换到前台或者网络状态发 生变化,重连时间会按照上面的时间间隔从头开始,保证这种情况下能尽快的连接成功。
主动退出重连机制
应用主动断开连接后,SDK 将退出重连机制,不再尝试重连。
重连互踢策略
重连互踢策略用于控制 SDK 自动重连成功时是否需要下线的设备。
即时通讯业务默认仅允许同一用户账号在单台移动端设备上登录。后登录的移动端设备一旦连接成功,则自动踢出之前登录的设备。在部分情况下,SDK 的重连机制可能会导致后登录设备无法正常在线。
例如,默认的重连互踢策略可能导致以下情况:
- 用户张三尝试在移动设备 A 上登录,但因 A 设备网络不稳定导致未连接成功,触发了 SDK 的自动重连机制。
- 用户此时尝试换到移动设备 B 上登录。B 设备连接成功,且用户可通过 B 设备正常使用即时通讯业务。
- A 设备网络稳定之后,SDK 重连成功。因此时 A 设备为后上线设备,导致 B 设备被踢出。
修改 App 用户的重连互踢策略
如果 App 用户希望在以上场景中将重连成功的 A 设备下线,同时保持 B 设备登录,可以修改当前用户(User ID
)的重连互踢策略。
使用该接口前,您须在融云控制台,通过应用配置>IM 服务>免费基础功能>其他,开启允许 SDK 修改重连互踢策略。
设置断线重连时是否踢出重连设备。该配置属于引擎配置,此方法需要在引擎初始化之前设置。
RCIMEngineOptions options = new RCIMEngineOptions();
options.kickReconnectDevice = true;
RCIMEngine e = RCIMEngine.create(appkey, options);
参数 | 类型 | 说明 |
---|---|---|
kickReconnectDevice | bool | 是否踢出正在重连的设备。详见下方 kickReconnectDevice 参数详细说明。 |
kickReconnectDevice
参数详细说明:
-
设置为
true
:如果重连时发现已有别的移动端设备在线,将不再重连,不影响已正常登录的移动端设备。
-
设置为
false
:如果重连时发现已有别的移动端设备在线,将踢出已在线的移动端设备,使当前设备上线。