A wrapper for a wrapper... Does that make any sense?
This is the question @philipbergen poses in the README for Zero. I can say with almost certainty that it does make sense. I do not use ØMQ but by just looking at some examples of how to use the standard python library and this wrapper, “a wrapper for a wrapper” just makes sense. So let’s look at some code!
Comparing Zero to PyZMQ
Let’s look at the Hello World example client that ØMQ provides in their GitHub repository:
# # Hello World client in Python # Connects REQ socket to tcp://localhost:5555 # Sends "Hello" to server, expects "World" back # import zmq context = zmq.Context() # Socket to talk to server print "Connecting to hello world server…" socket = context.socket(zmq.REQ) socket.connect ("tcp://localhost:5555") # Do 10 requests, waiting each time for a response for request in range (10): print "Sending request ", request,"…" socket.send ("Hello") # Get the reply. message = socket.recv() print "Received reply ", request, "[", message, "]"
And the Hello World example server that is needed to see it work properly:
# # Hello World server in Python # Binds REP socket to tcp://*:5555 # Expects "Hello" from client, replies with "World" # import zmq import time context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:5555") while True: # Wait for next request from client message = socket.recv() print "Received request: ", message # Do some 'work' time.sleep (1) # Do some 'work' # Send reply back to client socket.send("World")
Now let’s look at how this would be done in Zero. The equivalent client code would be:
from zero import Zero, ZeroSetup zero = Zero(ZeroSetup('req', 5555).debugging()) for request in range(10): reply = zero('Hello')
And the equivalent for the server would be:
from zero import Zero, ZeroSetup zero = Zero(ZeroSetup('rep', 5555).debugging()) for msg in zero: zero('World')
(Code samples courtesy of @philipbergen.)
But wait! There's more!
If you call 1-888-CHANGELOG in the next 5 minutes… Oh wait, that’s not right.
Philip has also built a command-line tool around his new library and includes it by default. This way you can even run some of these same examples in your favorite shell. For example,
# Hello World Client yes Hello | head -10 | zero req 5555 - # Hello World Server yes '"World"' | zero rep 5555 -