/* * This file is part of the Predis package. * * (c) Daniele Alessandri <*****@*****.**> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ require __DIR__ . '/shared.php'; // Starting from Redis 2.0 clients can subscribe and listen for events published // on certain channels using a Publish/Subscribe (PUB/SUB) approach. // Create a client and disable r/w timeout on the socket $client = new Predis\Client($single_server + array('read_write_timeout' => 0)); // Initialize a new pubsub consumer. $pubsub = $client->pubSubLoop(); // Subscribe to your channels $pubsub->subscribe('control_channel', 'notifications'); // Start processing the pubsup messages. Open a terminal and use redis-cli // to push messages to the channels. Examples: // ./redis-cli PUBLISH notifications "this is a test" // ./redis-cli PUBLISH control_channel quit_loop foreach ($pubsub as $message) { switch ($message->kind) { case 'subscribe': echo "Subscribed to {$message->channel}", PHP_EOL; break; case 'message': if ($message->channel == 'control_channel') { if ($message->payload == 'quit_loop') { echo "Aborting pubsub loop...", PHP_EOL;
<?php use Igorw\EventSource\Stream; require __DIR__ . '/vendor/autoload.php'; set_time_limit(0); $redis = new Predis\Client(); $pubsub = $redis->pubSubLoop(); $pubsub->subscribe('notification'); foreach (Stream::getHeaders() as $name => $value) { header("{$name}: {$value}"); } $stream = new Stream(); foreach ($pubsub as $message) { if ('message' === $message->kind) { $stream->event()->setEvent($message->channel)->setData($message->payload)->end()->flush(); } }