Creating a redis listener - possible in php?

大憨熊 提交于 2019-12-23 11:44:19

问题


I'm slowly digging in and learning redis in my spare time, and I am interested in the options available for creating a 'listener' for a website that subscribes to a channel, and updates a webpage as messages are received.

Now, from my old actionscript days, and current javascript work, i'm quite familiar with the concept of listeners given those two languages. However, my server-side-programming-fu really only extends as far as PHP, a bit of rails, a bit of python, and pseudo node.js (i'm a fairly experienced javascript guy, and understand what node.js does).

Since my main skill set lies in php, i'm wondering if it is even possible to do a persistent connection/socket with php and thus create a listener in PHP?

Since i'm guessing this isn't actually possible (or is the equivalent of fixing a windshield crack with a hammer), what are some server side options? Is it possible to just create a javascript listener that uses a persistent connection to the redis server (currently on localhost). Is Socket.io something I should look into?

Any insight for a redis beginner would be much appreciated.


edit I found a great post here How to use redis PUBLISH/SUBSCRIBE with nodejs to notify clients when data values change? that partially answers my question.

Is there a method aside from node.js that does the same thing? I'm ok with dropping php completely and trying something new for this project. It's a personal one anyways.


回答1:


The pub/sub mechanisms within redis require a subscribed client to be persistent, that is "always on" in order to receive the updates via the subscription.

It is possible to daemon-ize a PHP script/application, but it is not ideal, nor is it one of PHP's core competencies.

I would recommend looking to another solution. If you found the node.js + redis + pub/sub post you mentioned compelling, perhaps you should consider it more strongly.

You could also consider re-thinking how you architect your redis-stored data. Perhaps a set, from which items can be "popped" would suit the same purpose without requiring the use of redis pub/sub.




回答2:


The PubSubContext and DispatcherLoop examples from the Predis source code on Github are varying implementations of what you are trying to achieve, in PHP.




回答3:


If all you are looking to do is subscribe to a channel in redis and then do some work server side then it seems like PHP will work just fine. A cursory glance at Predis and phpredis show they both allow subscribing to a redis channel and registering a callback which fires whenever a message is received.



来源:https://stackoverflow.com/questions/8449911/creating-a-redis-listener-possible-in-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!