/*
 * 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;
示例#2
0
<?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();
    }
}