在线状态管理

最近更新时间:2019-08-02 15:32:42

概念介绍

在线

在线,是指客户端和即时通信 IM 服务端保持有顺畅的 TCP 网络连接,客户端可以发消息给即时通信 IM 服务端,也可以收到来自即时通信 IM 服务端推送的消息。

App 启动后,客户端和即时通信 IM 服务端建立 TCP 长连接,即时通信 IM 服务端保存客户端的在线信息,如客户端的网络链路,客户端的平台版本等。App 长连接建立成功后,在运行过程中,IM SDK 会定时发送心跳来维持当前的在线状态。iOS 或 Android 客户端和即时通信 IM 的 TCP 连接断开后,还可以收到消息的离线推送,但此时处于不在线的状态。

说明:

心跳:IM SDK 每隔2分钟发一个心跳包给服务器,以维持用户的在线状态。

上线

上线,是指 App 客户端和即时通信 IM 服务端建立 TCP 长连接的动作。

下线

下线,包括以下两种场景:

  1. App 客户端退出登录;
  2. 即时通信 IM 服务端检测到与 App 客户端的 TCP 长连接断开。服务端依赖心跳包超时来进行判断,当客户端和服务端之间持续 400 秒没有心跳包时,即时通信 IM 服务端认为该用户异常下线(Android 版本较多出现此情况)。

    注意:

    在线、上线、下线这几个概念,唯一的判断标准是客户端与即时通信 IM 后台是否保持网络连接。对于 iOS 或 Android 平台,即使用户不在线,仍然可以收到消息的离线推送。

查询用户在线状态

App 后台可以通过 REST API:获取用户在线状态 来查询一批用户的在线状态。
IM SDK 暂时无法获取用户的在线状态。

用户在线状态变更通知

即时通信 IM 可以把用户上下线的事件通知给 App 后台,参见 状态变更回调 文档。

多端登录

互踢

默认情况,IM SDK 在同时登录多个终端(如同时登录 PC、Android)时,会进行互踢,只有最后一个登录的设备可以在线,之前登录的都会被踢下线,详细互踢逻辑可以参考以下文档:

同时在线

即时通信 IM 支持在 控制台 修改同时在线策略,通过配置可以做到 PC 端和手机端同时在线,或者 PC、iOS 和 Android 都可以同时在线。开启同时在线登录不同终端后不会互踢,但是两个相同终端(例如两个 iOS 端登录)仍然会互踢。