如何获取Pubnub中指定CHANNEL的订阅用户数量
PubNub 特定频道订阅用户总数查询方案
PubNub 没有原生接口可以直接获取精准的频道订阅用户总数量,官方提供两种对应场景的替代实现方案:
方案1:实时在线订阅连接数统计(适用于需要统计当前在线订阅用户的场景)
依赖 PubNub 自带的 Presence 在线状态功能实现:
- 先在 PubNub 管理后台对应密钥对的功能配置中,开启 Presence 功能,可选开启 Presence Announce 配置,确保用户上下线事件都会被完整推送。
- 你可以选择两种统计方式:
- 服务端监听目标频道的 Presence 事件,自行维护计数器:收到
join事件时计数+1,收到leave或timeout事件时计数-1 - 直接调用
here_now接口获取当前频道的实时在线连接数,示例代码(Python SDK 为例):
- 服务端监听目标频道的 Presence 事件,自行维护计数器:收到
# 查询指定频道的当前在线连接数 res = pubnub.here_now().channels("your_target_channel").sync() # 输出总在线连接数 print(res.total_occupancy)
- 注意:该方案统计的是实时在线的连接数,如果同一个用户在多台设备同时订阅该频道,会被计为多个连接,离线用户不会被计入统计结果。
方案2:全量订阅用户数统计(适用于需要统计所有历史/已订阅用户,包含离线用户的场景)
需要在业务层自行维护订阅关系,官方没有持久化存储订阅用户列表的功能:
- 用户触发频道订阅操作时,在你自己的业务数据库中新增用户ID和频道的绑定关系,做去重处理避免同一用户多次订阅被重复计数
- 用户主动退订频道时,删除对应的绑定关系
- 需要统计总数时,直接查询数据库中该频道对应的去重用户数即可
提示:如果你的业务允许用户永久订阅不主动退订,可以不对退订事件做处理,统计值即为累计订阅过该频道的总用户数。
内容的提问来源于stack exchange,提问作者ksgr5566
相关产品推荐
相关产品推荐

