Skip to content

Instantly share code, notes, and snippets.

@thinkerbot
Created October 2, 2013 16:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thinkerbot/6796313 to your computer and use it in GitHub Desktop.
Save thinkerbot/6796313 to your computer and use it in GitHub Desktop.
Router reflector
#!/usr/bin/env ruby
require "ffi-rzmq"
require "securerandom"
id = SecureRandom.uuid
n = 1000000
endpoint = "ipc://message"
def assert(rc)
if ZMQ::Util.resultcode_ok?(rc)
true
else
$stderr.puts "failed, errno [#{ZMQ::Util.errno}] (#{ZMQ::Util.error_string})"
false
end
end
if fork
context = ZMQ::Context.new
router = context.socket(ZMQ::ROUTER)
router.bind(endpoint)
message = ""
loop do
assert(router.recv_string(message))
assert(router.recv_string(message))
router.send_strings [id, message]
break if message.empty?
end
router.close
else
if fork
context = ZMQ::Context.new
dealer = context.socket(ZMQ::DEALER)
dealer.setsockopt(ZMQ::IDENTITY, id)
dealer.connect(endpoint)
message = ""
loop do
assert(dealer.recv_string(message))
break if message.empty?
$stdout.print message
end
puts "done"
else
context = ZMQ::Context.new
dealer = context.socket(ZMQ::DEALER)
dealer.connect(endpoint)
n.times do |i|
dealer.send_string("#{i}\n")
end
dealer.send_string("")
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment