use strict; use warnings; use Config; use Time::HiRes qw/sleep time/; use ZeroMQ qw/:all/; BEGIN { if ( $Config{useithreads} ) { # We have threads require threads; } else { die 'Need threads to test '; } } if (@ARGV != 3) { die < HERE } my $addr = shift @ARGV; my $msg_size = shift @ARGV; my $roundtrip_count = shift @ARGV; my $local_thr = threads->create( \&local ); sub local { my $cxt = ZeroMQ::Context->new(1); my $sock = ZeroMQ::Socket->new( $cxt, ZMQ_REP ); print "[local] Trying to start at $addr \n"; $sock->bind($addr); my $msg; foreach ( 1 .. $roundtrip_count ) { #warn "$_\n" if (not $_ % 1000); $msg = $sock->recv(); die "Bad size" if $msg->size() != $msg_size; $sock->send($msg); } } sleep 0.1; my $remote_thr = threads->create( \&remote ); sub remote { my $cxt = ZeroMQ::Context->new(1); my $sock = ZeroMQ::Socket->new( $cxt, ZMQ_REQ ); print "[remote] Trying to start at $addr \n"; $sock->connect($addr); my $text = '0' x $msg_size; my $msg = ZeroMQ::Message->new($text); my $before = time(); foreach ( 1 .. $roundtrip_count ) { #warn "$_\n" if (not $_ % 1000); $sock->send($msg); $msg = $sock->recv(); die "Bad size" if $msg->size() != $msg_size; } my $after = time(); my $latency = ($after - $before) / ( $roundtrip_count * 2 ) * 1.e6; print "Latency: $latency us\n"; } END { $local_thr->join() if defined $local_thr; $remote_thr->join() if defined $remote_thr; }