PUB-SUB with multipart messages
file: bin/anyevent_subscriber.pl
1: #!/usr/bin/env perl
2: use 5.016;
3: use ZMQ::LibZMQ3;
4: use ZMQ::Constants qw(ZMQ_SUB ZMQ_FD ZMQ_SUBSCRIBE ZMQ_RCVMORE);
5: use AnyEvent;
6:
7: my $context = zmq_init();
8: my $subscriber = zmq_socket($context, ZMQ_SUB);
9: zmq_connect($subscriber, 'tcp://localhost:10001');
10: zmq_setsockopt( $subscriber, ZMQ_SUBSCRIBE, $ARGV[0] || '' );
11: my $fh = zmq_getsockopt( $subscriber, ZMQ_FD );
12:
13: my $w = AnyEvent->io(
14: fh => $fh,
15: poll => "r",
16: cb => sub {
17: my @parts;
18: while ( my $rmsg = zmq_recvmsg( $subscriber)) {
19: push (@parts,zmq_msg_data( $rmsg ));
20: if (!zmq_getsockopt($subscriber, ZMQ_RCVMORE)) {
21: say "artist $parts[1] released song $parts[3] on $parts[2]";
22: @parts=();
23: }
24: }
25: },
26: );
27: AnyEvent->condvar->recv;