NAME

AnyEvent::Redis::Subscriber - event-driven Redis subscriber client

SYNOPSIS

use AnyEvent::Redis::Subscriber;
my $subscriber = AnyEvent::Redis::Subscriber->subscribe(
    host => 'redis', 
    channel => 'z'
);
$subscriber->reg_cb(message => sub {
    my ($subscriber, $message) = @_;
    # ...
};

DESCRIPTION

This module is an AnyEvent user; you must use and run a supported event loop.

AnyEvent::Redis::Subscriber is an event-driven (asynchronous) subscriber for the Redis publish/subscribe system.

The main idea is that other clients (such as AnyEvent::Redis) publish messages to a specified channel (or class, in Redis-speak), which are then received by each client that has subscribed to the channel.

Unlike some other publish/subscribe mechanisms which are producer-consumer based, Redis' publish/subscribe mechanism is broadcast-based: every subscriber to a channel receives every message sent to that channel; and messages are not queued for future delivery if there are no subscribers for that channel.

Subscribing to a channel

To subscribe to a channel, call the subscribe() method:

my $subscriber = AnyEvent::Redis::Subscriber->subscribe(
   host => $host,
   channel => $channel,
   ...
);

This immediately establishes a connection to the Redis server at the given host and subscribes to the specified channel.

Pattern-based subscriptions are also possible. Instead of specifying a channel, a pattern may be specified consisting of a glob pattern that matches channel names. For example, if chan_* is specified, then the client will receive every message sent to "chan_1", "chan_2", "chan_zebra", and so forth while connected to the server:

my $subscriber = AnyEvent::Redis::Subscriber->subscribe(
   host => $host,
   pattern => $pattern,
   ...
);

Optional arguments include:

port => $port

Connect to the Redis server at $port. If undefined, the default port (6379) is used.

auth => $password

Authenticate to the server with the given password.

Receiving messages

To receive messages, register a callback for the message event. When a message is received, the callback will be fired with the message and the channel it was received on:

$subscriber->reg_cb(message => sub {
    my ($subscriber, $channel, $message) = @_;
    print "Received message $message on channel $channel";
});

Dealing with errors

To be notified of errors (which can occur at connect time or thereafter), register a callback as follows:

$subscriber->reg_cb(error => sub {
   my ($subscriber, $errmsg) = @_;
   # ...
});

WARNING: As with all AnyEvent modules, you must not die() in a callback!

Unsubscribing

To unsubscribe, just undef the subscriber handle. Reusing handles for subsequent subscriptions is not supported. Even though the wire protocol technically supports it, trust me, it's better this way :-).

SEE ALSO

Redis PublishSubscribe http://code.google.com/p/redis/wiki/PublishSubscribe

AUTHOR

Michael S. Fischer <michael+cpan@dynamine.net>

COPYRIGHT AND LICENSE

Copyright (C) 2010 Michael S. Fischer

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.