Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a redis listener - possible in php?

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.

like image 518
Jonathan Coe Avatar asked Dec 09 '11 18:12

Jonathan Coe


1 Answers

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.

like image 96
ben_weller Avatar answered Sep 30 '22 12:09

ben_weller