关于用户在线/离线状态判定规则及并发用户计算的技术问询
Stream用户在线状态相关问题解答
一、在线/离线状态判定规则
- 核心逻辑是实时连接+空闲超时双重判定:
- 客户端和Stream服务器保持WebSocket长连接时,用户标记为在线;连接断开后,不会立刻切离线,会等待默认300秒(5分钟)的空闲超时,超时后才更新为离线状态
- 如果客户端主动触发离线指令(调用SDK对应方法),会立即切换状态
- 卸载/强杀应用时,客户端没法主动发离线信号,服务器只能等连接超时+空闲超时走完,才会更新状态,这就是你卸载后仍显示在线的原因
二、对并发用户计算的影响
- 并发用户数统计以当前处于在线状态的用户为准,也就是连接活跃或者没超过空闲超时的用户都会被算进去
- 空闲超时的存在会让并发数有延迟回落,不会因为用户短暂断开就立刻减少计数
三、Flutter端的处理方案
- 一定要在
dispose函数里加主动离线逻辑,比如应用退出前调用SDK的离线方法,示例代码:
@override void dispose() { // 调用Stream SDK的主动离线接口,具体方法名以官方SDK文档为准 streamClient.markUserAsOffline(); super.dispose(); }
- 注意:如果是用户直接划掉进程这类强制杀死应用的情况,
dispose可能不会执行,这种情况只能靠服务器的空闲超时机制自动修正状态
四、Stream官方相关政策
- 空闲超时默认5分钟,部分付费套餐支持自定义超时时长
- 服务器会定期清理超时的在线连接,确保状态最终准确,但存在一定延迟
- 官方明确推荐在应用生命周期销毁阶段主动调用离线方法,避免状态更新延迟
内容的提问来源于stack exchange,提问作者nassim
相关产品推荐
相关产品推荐

