我正在使用php redis pubsub我注意到如果订阅者没有运行,如果我们将事件发布到频道,那么该事件将被删除。
因此,在将某些内容发布到频道之前,我想检查用户是否正在运行?
任何方式来识别状态或任何不同的方式,以便我的发布的事件不应该退出。 提前致谢
答案 0 :(得分:3)
您无法判断您的订阅者是否正在收听,这是设计原因:
请参阅http://redis.io/topics/pubsub
[...]发件人(发布者)未编程发送邮件 特定接收者(订户)。相反,已发布的消息是 特征为渠道,不知道什么(如果有的话) 订阅者可能。
这不是Redis特有的,而是任何Pub / Sub实现背后的基本原则。
您可能会询问如何可靠地向您发送消息,但Redis还没有内置的功能:
http://redis.io/topics/notifications
因为Redis Pub / Sub 火,忘了目前没有办法 如果您的应用需要可靠的通知,请使用此功能 事件,即,如果您的发布/订阅客户端断开连接并重新连接 之后,在客户端期间交付的所有事件 断开连接会丢失。
您可能希望在现有功能之上实现自己的机制。例如,您可以将LPUSH个新消息发送到PUB端的列表,并RPOP在客户端使用它们,并使用keyspace notifications知道何时执行此操作。使用这种方法,即使没有客户端正在收听,您也不会丢失任何消息。