Skip to content

Instantly share code, notes, and snippets.

@wesyoung
Created December 10, 2013 13:01
Show Gist options
  • Select an option

  • Save wesyoung/7890238 to your computer and use it in GitHub Desktop.

Select an option

Save wesyoung/7890238 to your computer and use it in GitHub Desktop.
the other side of this is a REQ socket.
#!/usr/bin/env perl
use 5.011;
use strict;
use warnings;
use AnyEvent;
use Data::Dumper;
use ZMQx::Class;
use constant ZMQ_FRONT => 'tcp://*:5555';
use constant ZMQ_BACK => 'tcp://*:5556';
use constant ZMQ_CONNECT => 'tcp://localhost:5556';
my $router = ZMQx::Class->socket(
'ROUTER',
bind => ZMQ_FRONT(),
);
my $dealer = ZMQx::Class->socket(
'DEALER',
bind => ZMQ_BACK(),
);
my $worker = ZMQx::Class->socket(
'REP',
connect => ZMQ_CONNECT(),
);
my $pub = ZMQx::Class->socket(
'PUB',
bind => 'tcp://*:5557',
);
my $sub = ZMQx::Class->socket(
'SUB',
connect => 'tcp://localhost:5557',
);
$sub->subscribe(1);
$pub->send('wakeup!');
warn Dumper($pub);
say 'spinning up...';
my $ret;
my $front_end = $router->anyevent_watcher(
sub {
while (my $msg = $router->receive()){
say '[router] got: '.@$msg[2];
$ret = $dealer->send($msg);
say '[router]: '.$ret;
say '[router] mirroring to pub';
$ret = $pub->send([1,@$msg[2]]);
say $ret;
}
},
);
my $backend = $dealer->anyevent_watcher(
sub {
while (my $msg = $dealer->receive()){
say '[dealer] got: '.@$msg[2];
$ret = $router->send($msg);
say '[dealer]: '.$ret;
}
}
);
my $w = $worker->anyevent_watcher(
sub {
while (my $msg = $worker->receive()){
say '[worker] got: '.@$msg[0];
say '[worker] sending reply...';
$ret = $worker->send('reply');
say '[worker] '.$ret;
}
}
);
my $sub_watch = $sub->anyevent_watcher(
sub {
while (my $msg = $sub->receive()){
say '[sub] got: '.@$msg[1];
}
}
);
say 'ready...';
AnyEvent->condvar->recv;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment