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

标签 php node.js laravel redis predis

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

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

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

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

最佳答案

要求pubsub 使用两个连接。订阅者连接不能发出除subscribepsubscribeunsubscribepunsubscribe之外的任何命令> (尽管 @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/

相关文章:

php - 使用未定义的常量字符串 - 从变量调用类名时假定为 'String'

php - 使用 Codeigniter 3.0.1 在数据库中上传图像

node.js - Swisscom应用云 Node 版本

php - 如何显示数据库中的所有行 - Laravel 5.2?

php - SSL 在 laravel 5.5 上

php - SELECT 查询不适用于使用准备好的语句的 IN

javascript - php 中的 url 参数名称是否区分大小写?如果不区分大小写,它们是否可以轻松标准化(并设为小写等)?

javascript - 如何使用node.js和express读取post请求负载?

javascript - 在 Mocha 中测试 MySQL 连接

php - 如何在 laravel 上不使用 get() 启动模型