我有一个 Laravel php 应用程序和一个 NodeJS 客户端。我的客户端发生了一些事情,我想更新我的 php 后端,因此我向 Redis channel 发布一条消息,并且在我的 Laravel 应用程序中,我有一个 Redis 订阅者正在监听该 channel 上的消息。
理想情况下,我想在收到消息时触发一个事件,但收到此错误
[Predis\Response\ServerException] 在此上下文中仅允许 ERR (P)SUBSCRIBE/(P)UNSUBSCRIBE/QUIT
我能够从订阅者中执行我需要的操作,例如更新存储库等...但我无法触发 Laravel 事件,这是在这里做的有意义的事情。
最佳答案
您要求为pub
和sub
使用两个连接。订阅者连接不能发出除subscribe
、psubscribe
、unsubscribe
、punsubscribe
之外的任何命令> (尽管 @Antirez 暗示将来会提供订阅者安全的 ping)。如果您尝试执行其他操作,Redis 会告诉您:
-ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context
(note that you can't test this with redis-cli, since that understands the protocol well enough to prevent you from issuing commands once you have subscribed - but any other basic socket tool should work fine)
这是因为订阅者连接的工作方式非常不同 - 传入消息现在可以随时未经请求地传入,而不是在请求/响应的基础上工作。
publish 是常规请求/响应命令,因此必须在常规连接上发送,而不是在订阅者连接上发送。 For more information click here
关于php - 从 Predis 订阅函数中触发 Laravel 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31332534/