5

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.

Community
  • 1
  • 1
Jonathan Coe
  • 1,485
  • 4
  • 18
  • 36
  • I dont quite get what you want to accomplish. Since PHP is server side, the page will be updated upon page load. If you are still looking for an event/observer type of mechanism you can use this one: http://components.symfony-project.org/event-dispatcher/. And this might also be interesting for you http://rediska.geometria-lab.net/documentation/usage/publish-subscribe/. But again, I dont quite get, what you want to do.. – Kristian Hildebrandt Dec 09 '11 at 20:40
  • @KristianHildebrandt I'm more or less exploring live update type applications... however, after doing a lot of digging, the only real way to do this is to build it out using something like node.js, which is built to use listeners anyways. Regardless, thanks for the links! – Jonathan Coe Dec 14 '11 at 22:53
  • @Jonathan Coe: Please accept an answer. – McK Jan 18 '16 at 12:06

3 Answers3

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.

datashaman
  • 8,301
  • 3
  • 22
  • 29
2

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.

ben_weller
  • 88
  • 7
1

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.

Carl Zulauf
  • 39,378
  • 2
  • 34
  • 47
  • Thanks for the tip! Since I posted this question, i've more or less gotten a pretty significant handle on redis... mostly just by porting an entire project from mysql -> redis and using Predis to act as mediator. Pretty amazing software, and i'm really excited to get a better handle on the whole pub/sub side of things and see what can be done. – Jonathan Coe Dec 14 '11 at 22:56