2

我有一个 Laravel php 应用程序和一个 NodeJS 客户端。我的客户端发生了一些事情,我想更新我的 php 后端,所以我向 Redis 频道发布了一条消息,在我的 Laravel 应用程序中,我有一个 Redis 订阅者在该频道上监听消息。

理想情况下,我想在收到消息时触发一个事件,但我收到此错误

[Predis\Response\ServerException] 仅 ERR (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT 在此上下文中允许

我可以在订阅者内部做我需要的事情,比如更新存储库等……但我无法触发 Laravel 事件,这是在这里做的有意义的事情。

4

1 回答 1

2

需要pub和使用两个连接sub。订阅者连接不能subscribe发出除, psubscribe, unsubscribe,以外的任何命令punsubscribe(尽管@Antirez 暗示将来会提供订阅者安全的 ping)。如果你尝试做其他事情,redis 会告诉你:

-ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context (请注意,您不能使用 redis-cli 对此进行测试,因为它对协议的理解足以防止您在订阅后发出命令 - 但任何其他基本套接字工具都应该可以正常工作)

这是因为订阅者连接的工作方式非常不同 - 而不是在请求/响应的基础上工作,传入消息现在可以随时进来,不请自来。

发布是常规请求/响应命令,因此必须在常规连接上发送,而不是在订阅者连接上发送。 欲了解更多信息,请点击此处

于 2015-07-10T05:13:49.853 回答