跳到主要内容

重连机制与重连互踢

自动重连机制

SDK 内已实现自动重连机制,一旦连接成功,SDK 的重连机制将立即开始生效,并接管所有的重连处理。当因为网络原因断线时,SDK 内部会尝试重新建立连接,不需要您做额外的连接操作。

可能导致 SDK 断线重连的异常情况如下:

  • 弱网环境:可能出现 SDK 不停重连的情况。因为客户端 SDK 和融云服务端之间存在连接保活机制,一旦因如果网络太差导致心跳超时,SDK 就会触发重连操作,尝试重连直到连接成功。
  • 无网环境:SDK 的重连机制会暂停。一旦网络恢复,SDK 会进行重连操作。
提示

一旦触发连接错误的回调,SDK 将退出重连机制。请根据具体的状态码自行处理。

重连时间间隔

SDK 尝试重连时,时间间隔逐次变大,分别是 0.05s, 0.25s, 0.5s, 1s, 2s, 4s, 8s, 16s, 32s。之后每 64s 重试一次。

当 APP 切换到前台或者网络状态发生变化,重连时间会按照上面的时间间隔从头开始,保证这种情况下能尽快的连接成功。

主动退出重连机制

应用主动断开连接后,SDK 将退出重连机制,不再尝试重连。

重连互踢策略

重连互踢策略用于控制 SDK 自动重连成功时是否需要下线的设备。

即时通讯业务默认仅允许同一用户账号在单台移动端设备上登录。后登录的移动端设备一旦连接成功,则自动踢出之前登录的设备。在部分情况下,SDK 的重连机制可能会导致后登录设备无法正常在线。

例如,默认的重连互踢策略可能导致以下情况:

  1. 用户张三尝试在移动设备 A 上登录,但因 A 设备网络不稳定导致未连接成功,触发了 SDK 的自动重连机制。
  2. 用户此时尝试换到移动设备 B 上登录。B 设备连接成功,且用户可通过 B 设备正常使用即时通讯业务。
  3. A 设备网络稳定之后,SDK 重连成功。因此时 A 设备为后上线设备,导致 B 设备被踢出。

修改 App 用户的重连互踢策略

如果 App 用户希望在以上场景中将重连成功的 A 设备下线,同时保持 B 设备登录,可以修改当前用户(User ID)的重连互踢策略

提示

使用该接口要求该 App Key 已启用登录时判断用户其他端登录状态提示(移动端)。如需启用该服务,请提交工单。

设置断线重连时是否踢出重连设备。此方法需要在 init 之前调用。

/**
* 上设置断线重连时是否踢出重连设备。
* 用户没有开通多设备登录功能的前提下,同一个账号在一台新设备上登录的时候,会把这个账号在之前登录的设备上踢出。
* 由于 SDK 有断线重连功能,存在下面情况: 用户在 A 设备登录,A 设备网络不稳定,没有连接成功,SDK 启动重连机制。 用户此时又在 B 设备登录,B 设备连接成功。 A
* 设备网络稳定之后,用户在 A 设备连接成功,B 设备被踢出。 这个接口就是为这种情况加的。
*
* @param enable 设置为 true 时,SDK 重连的时候发现此时已有别的设备连接成功,不再强行踢出已有设备,而是踢出重连设备
* @note 当 SDK 初始化时就会用该字段,所以必须在 init 之前调用
* @note 该功能需要提工单,在服务端开通此功能后,客户端调用该方法才生效
* @version 1.2.0
*/
public setReconnectKickEnable(enable: boolean): void ;
// 示例代码
IMEngine.getInstance().setReconnectKickEnable(true)
参数类型说明
enableboolean是否踢出正在重连的设备。详见下方 enable 参数详细说明

enable 参数详细说明

  • 设置 enabletrue

    如果重连时发现已有别的移动端设备在线,将不再重连,不影响已正常登录的移动端设备。

  • 设置 enablefalse

    如果重连时发现已有别的移动端设备在线,将踢出已在线的移动端设备,使当前设备上线。