ZeroMQ is a framework for writing distribute applications. [Homepage](https://zeromq.org/) and [their github](https://github.com/zeromq). ## Official minimal example Server: ```python # # Hello World server in Python # Binds REP socket to tcp://*:5555 # Expects b"Hello" from client, replies with b"World" # import time import zmq 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: %s" % message) # Do some 'work' time.sleep(1) # Send reply back to client socket.send(b"World") ``` client: ```python Copy # # 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 %s …" % request) socket.send(b"Hello") # Get the reply. message = socket.recv() print("Received reply %s [ %s ]" % (request, message)) ``` ## RtMidi Pipe Example that takes midi from a device (here an M32), and forwards the raw midi messages via ZeroMQ. ### Server ```python import time import zmq 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: ",end="") for i,x in enumerate(message): print(f"{x:02x}",end=" ") if (i+1)%32 == 0: print() if (i+1)%32 != 0: print() # Send reply back to client socket.send(b"ACK") ``` ### Client ```python import zmq from time import sleep from rtmidi import RtMidiIn context = zmq.Context() # Socket to talk to server print("Connecting to hello world server…") socket = context.socket(zmq.REQ) socket.connect("tcp://localhost:5555") pat = "M32" midiin = RtMidiIn() for i in range(midiin.getPortCount()): name = midiin.getPortName(i) if pat in name: midiin.openPort(i) break else: print(f"Didn't find port with name containing {pat}") exit(1) def cb(e): a = e.getRawData() print(a) socket.send(a) message = socket.recv() print(f"received {message}") midiin.setCallback(cb) try: while True: sleep(0.01) except KeyboardInterrupt: exit(0) ```