我目前有兴趣了解我拥有的Redis发布/订阅应用中订阅的频道。当客户端连接到我们的服务器,我们将它们注册,看起来像一个通道:Redis发布/订阅:查看目前订阅的频道
user:user_id
这样做的原因是我希望能够看到谁是“在线”。目前,我不知道客户端是否在线,因此盲目地将消息发送到某个频道,因为他们收到这些类型的消息并不重要。
为了让我的应用程序更加智能化,我希望能够发现客户端是否在线或不使用pub/sub API,如果它们处于脱机状态,则将其消息缓存到单独的redis队列当他们恢复在线时我可以推送给他们。
这并不一定是100%准确的,但它越精确越好。我假设一个通用密钥在通道订阅时不会被创建,所以我不能做一些微不足道的事情:
redis-cli keys user*
找到所有在线用户。
我想过的另一种策略是只要用户在频道上发布或删除自己(当客户端在线跳转并关闭应用程序时自动处理)就维护自己的Redis集。这将是我需要管理的一个额外的复杂层面,我希望现有的数据有一个更简单的方法。
很棒的建议!我刚才也有同样的需求,并设法通过向频道发布'null'来获得订阅人数来编写它。然后在侦听器中,我检查消息是否为None,如果是,则跳过它。队友的欢呼声! –