从Predis订阅函数中触发Laravel事件

时间:2015-07-10 04:36:06

标签: php node.js laravel redis predis

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

理想情况下,我想在收到邮件时触发事件但是我收到此错误

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

我能够在订阅者中执行我需要的操作,例如更新存储库等...但我无法触发Laravel事件,这是在这里做的有意义。

1 个答案:

答案 0 :(得分:2)

必需pubsub使用两个连接。订阅者连接无法发出subscribepsubscribeunsubscribepunsubscribe以外的任何命令(尽管@Antirez暗示了订阅者安全未来ping)。如果您尝试做任何其他事情,redis会告诉您:

  

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

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

publish是常规请求/响应命令,因此必须在常规连接上发送,而不是在订户连接上发送。 For more information click here