Hi all,
I'm trying to figure out whether this has been done before and/or
looking for suggestions on the best way to implement it.
I would like the "publish" clients to connect to a server, then publish
their message and disconnect. (Optionally, they can stay connected and
publish more messages.)
The "subscribe" clients would hold persistent connections to the server
(there are only 2 subscribers, though there could be more) and receive
the messages immediately after publication.
My first crack at implementing this involves forks and pipe opens where
the publisher is given a list of filehandles which are (mostly)
subscribers. This drops some messages on the floor rather than sending
them to the subscriber iff the publishers get in race (and repeating
the race condition is difficult), but at least the overall form is
roughly what I had in mind.
http://scratchcomputing.com/svn/misc/pubsubserver
To put that in some rough but short code:
my $fh;
while(my $client = $socket->accept()) {
my $pid = open($fh, '|-') and next;
if(pub) {
while(<$client>) { print $fh $_ }
}
else {
while(<>) { relay_to_subscriber($client) }
}
exit;
}
Nevermind the piped open, I'll probably just fork and use tempfiles or
something.
The real question is: before I start down the road of inventing a
protocol, is there anything out there which already does it? I note
wikipedia's "publish/subscribe" and "observer pattern" have various
links to implementations, but apparently there is no standard?
Failing that, my next step is to come up with some kind of scheme for
performing delivery in distinct chunks (of YAML.)
Thanks,
Eric
--
Don't worry about what anybody else is going to do. The best way to
predict the future is to invent it.
--Alan Kay
---------------------------------------------------
http://scratchcomputing.com
---------------------------------------------------
Thread Next