Creating a redis listener - possible in php?

2019-06-22 09:07发布

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.

3条回答
霸刀☆藐视天下
2楼-- · 2019-06-22 09:52

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.

查看更多
Anthone
3楼-- · 2019-06-22 09:57

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.

查看更多
手持菜刀,她持情操
4楼-- · 2019-06-22 10:03

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

查看更多
登录 后发表回答