创建一个 redis 侦听器 - 可能在 php 中?

Posted

技术标签:

【中文标题】创建一个 redis 侦听器 - 可能在 php 中?【英文标题】:Creating a redis listener - possible in php? 【发布时间】:2012-01-17 00:09:14 【问题描述】:

我在业余时间慢慢挖掘和学习 redis,我对为订阅频道的网站创建“侦听器”以及在收到消息时更新网页的可用选项感兴趣。

现在,从我以前的 actionscript 时代和当前的 javascript 工作开始,我对这两种语言的侦听器概念非常熟悉。然而,我的 server-side-programming-fu 实际上只扩展到 php、一点 rails、一点 python 和伪 node.js(我是一个相当有经验的 javascript 人,并且了解 node.js 的作用)。

由于我的主要技能在于 php,我想知道是否甚至可以使用 php 进行持久连接/套接字,从而在 PHP 中创建一个侦听器?

因为我猜这实际上是不可能的(或者相当于用锤子修复挡风玻璃裂缝),有哪些服务器端选项?是否可以只创建一个使用持久连接到 redis 服务器(当前在本地主机上)的 javascript 侦听器。 Socket.io 是我应该研究的吗?

对于 redis 初学者的任何见解将不胜感激。


编辑我在这里找到了一篇很棒的帖子How to use redis PUBLISH/SUBSCRIBE with nodejs to notify clients when data values change?,它部分回答了我的问题。

除了 node.js 之外还有其他方法可以做同样的事情吗?我可以完全放弃 php 并为这个项目尝试一些新的东西。无论如何,这是个人的。

【问题讨论】:

我不太明白你想要完成什么。由于 PHP 是服务器端,因此页面将在页面加载时更新。如果您仍在寻找一种事件/观察者类型的机制,您可以使用这个:components.symfony-project.org/event-dispatcher。这对你来说可能也很有趣rediska.geometria-lab.net/documentation/usage/publish-subscribe。但同样,我不太明白你想做什么.. @KristianHildebrandt 我或多或少在探索实时更新类型的应用程序......但是,在进行了大量挖掘之后,唯一真正的方法是使用类似 node.js 的东西来构建它。 js,它是为使用监听器而构建的。无论如何,感谢您的链接! @Jonathan Coe:请接受答案。 【参考方案1】:

redis 中的 pub/sub 机制要求订阅的客户端是持久的,即“始终在线”以便通过订阅接收更新。

可以对 PHP 脚本/应用程序进行守护程序化,但这并不理想,也不是 PHP 的核心能力之一。

我建议寻找其他解决方案。如果您发现您提到的 node.js + redis + pub/sub 帖子引人注目,也许您应该更强烈地考虑它。

您还可以考虑重新考虑如何构建您的 redis 存储数据。也许一个可以“弹出”项目的集合适合相同的目的,而不需要使用 redis pub/sub。

【讨论】:

【参考方案2】:

Github 上 Predis 源代码中的 PubSubContext 和 DispatcherLoop 示例是您尝试在 PHP 中实现的不同实现。

【讨论】:

【参考方案3】:

如果您只想在 redis 中订阅一个频道,然后做一些工作服务器端,那么 PHP 似乎可以正常工作。粗略看一下Predis 和 phpredis 表明它们都允许订阅 redis 通道并注册一个回调,该回调会在收到消息时触发。

【讨论】:

感谢您的提示!自从我发布这个问题以来,我或多或少地对 redis 有了相当大的了解……主要是通过从 mysql -> redis 移植整个项目并使用 Predis 作为中介。非常棒的软件,我真的很高兴能更好地处理整个 pub/sub 方面的事情,看看能做些什么。

以上是关于创建一个 redis 侦听器 - 可能在 php 中?的主要内容,如果未能解决你的问题,请参考以下文章

php 大文件上传 redis+php resque 较低io消耗

(PHP)redis list(列表)操作

动态创建按钮的事件监听器

Windows下安装Redis及php的redis拓展教程

Windows下安装Redis及php的redis拓展教程

需要 Paypal IPN 侦听器帮助