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_t
message
;
zmq_msg_init
(
&
message
);
zmq_msg_recv
(
socket
,
&
message
,
0
);
// Process the message frame
zmq_msg_close
(
&
message
);
int
more
;
size_t
more_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 ...
Get ZeroMQ now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.