Multipart Messages
ØMQ lets us compose a message out of several frames, giving us a “multipart message.” Realistic applications use multipart messages heavily, both for wrapping messages with address information and for simple serialization. We’ll look at reply envelopes later. What we’ll learn now is simply how to safely (but blindly) read and write multipart messages in any application (like a proxy) that needs to forward messages without inspecting them.
When you work with multipart messages, each part is a zmq_msg item. For example, if you are sending
a message with five parts, you must construct, send, and destroy five
zmq_msg items. You can do this in
advance (and store the zmq_msg items
in an array or structure), or as you send them, one by one.
Here is how we send the frames in a multipart message (we receive each frame into a message object):
zmq_msg_send(socket,&message,ZMQ_SNDMORE);...zmq_msg_send(socket,&message,ZMQ_SNDMORE);...zmq_msg_send(socket,&message,0);
Here is how we receive and process all the parts in a message, be it single part or multipart:
while(1){zmq_msg_tmessage;zmq_msg_init(&message);zmq_msg_recv(socket,&message,0);// Process the message framezmq_msg_close(&message);intmore;size_tmore_size=sizeof(more);zmq_getsockopt(socket,ZMQ_RCVMORE,&more,&more_size);if(!more)break;// Last message frame}
Some things to know about multipart messages:
When you send a multipart message, the first part and all following parts are only ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access