使用emqttd做web即时通讯时,应该怎样判断用户的在线状态?

emqttd中现有的两种方式:
1.通过HTTP API (/api/clients)可以获取当前在线的所有用户
2.通过订阅系统主题
$SYS/brokers/${node}/clients/${clientid}/connected
$SYS/brokers/${node}/clients/${clientid}/disconnected
分别接收用户上线和下线的通知

第一种方式我的想法是通过定时任务,每隔一段时间获取一次所有在线用户,然后对比更新redis
第二种方式就是正常的收到通知单条更新

但是现在发现有两个问题,
第一种方式不是真正的实时获取数据,会产生延迟,并且数据量大的话一次数据处理过程时间也不短;
第二种方式虽然看着很灵活,但是由于web端的刷新也会触发用户的上下线,所以服务器接收消息的频率非常高,并且无法排除伪下线;

有没有高手知道这一块应该怎么处理才合适?

阅读 4.3k
1 个回答
新手上路,请多包涵

楼主可以加我qq吗 我也在用emq做web推送 想问你问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题