【问题标题】:Firing a Laravel event from within the Predis subscribe function从 Predis 订阅函数中触发 Laravel 事件
【发布时间】:2015-09-28 17:12:11
【问题描述】:

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

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

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

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

【问题讨论】:

标签: php node.js laravel redis predis


【解决方案1】:

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

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

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

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

【讨论】:

  • 我的 Node 应用程序是发布者。我的 Laravel 应用程序是订阅者。 Laravel 订阅了频道,节点已发布到。这就是发布/订阅模型的工作原理,对吗?
  • 当订阅者收到消息时,我需要触发一个 Laravel 事件。
  • 是的,完全正确。当 sub rec。您需要通知 laravel 的消息意味着在 event.php 中触发 Laravel 事件并在句柄类中处理
  • 这是我的问题。我无法触发事件。我必须将数据保存到私有变量,取消订阅该频道,然后触发 Laravel 事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多