IPC::PubSub is Perl module for Interprocess Publish/Subscribe channels.
SYNOPSIS
# A new message bus with the DBM::Deep backend
# (Other possible backends include Memcached and PlainHash)
my $bus = IPC::PubSub->new(DBM_Deep => '/tmp/pubsub.db');
# A channel is any arbitrary string
my $channel = '#perl6';
# Register a new publisher (you can publish to multiple channels)
my $pub = $bus->new_publisher("#perl6", "#moose");
# Publish a message (may be a complex object) to those channels
$pub->msg("This is a message");
# Register a new subscriber (you can subscribe to multiple channels)
my $sub = $bus->new_subscriber("#moose");
# Publish an object to channels
$pub->msg("This is another message");
# Set all subsequent messages from this publisher to expire in 30 seconds
$pub->expiry(30);
$pub->msg("This message will go away in 30 seconds");
# Simple get: Returns the messages sent since the previous get,
# but only for the first channel.
my @msgs = $sub->get;
# Simple get, with an explicit channel key (must be among the ones
# it initially subscribed to)
my @moose_msgs = $sub->get("#moose");
# Complex get: Returns a hash reference from channels to array
# references of [timestamp, message].
my $hash_ref = $sub->get_all;
# Changing the list of channels we subscribe to
$sub->subscribe('some-other-channel');
$sub->unsubscribe('some-other-channel');
# Changing the list of channels we publish to
$pub->publish('some-other-channel');
$pub->unpublish('some-other-channel');
# Listing and checking if we are in a channel
my @sub_channels = $sub->channels;
my @pub_channels = $pub->channels;
print "Sub is in #moose" if $sub->channels->{'#moose'};
print "Pub is in #moose" if $pub->channels->{'#moose'};
# Raw cache manipulation APIs (not advised; use ->modify instead)
$bus->lock('channel');
$bus->unlock('channel');
my @timed_msgs = $bus->fetch('key1', 'key2', 'key3');
$bus->store('key', 'value', time, 30);
# Atomic updating of cache content; $_ is stored back on the
# end of the callback.
my $rv = $bus->modify('key' => sub { delete $_->{foo} });
# Shorthand for $bus->modify('key' => sub { $_ = 'val' });
$bus->modify('key' => 'val');
# Shorthand for $bus->modify('key' => sub { $_ });
$bus->modify('key');
This module provides a simple API for publishing messages to channels and for subscribing to them.
When a message is published on a channel, all subscribers currently in that channel will get it on their next get or get_all call.
Currently, it offers three backends: DBM_Deep for on-disk storage, Memcached for possibly multi-host storage, and PlainHash for single-process storage.
Please see the tests in t/ for this distribution, as well as "SYNOPSIS" above, for some usage examples; detailed documentation is not yet available.
Product's homepage
Requirements:
· Perl