Node Coordination
When you want to coordinate nodes, PAIR sockets wonât work well any more. This is one of the few areas where the strategies for threads and nodes are different. Principally, nodes come and go whereas threads are static. PAIR sockets do not automatically reconnect if the remote node goes away and comes back.
The second significant difference between threads and nodes is that you typically have a fixed number of threads but a more variable number of nodes. Letâs take one of our earlier scenarios (the weather server and clients) and use node coordination to ensure that subscribers donât lose data when starting up.
This is how the application will work:
The publisher knows in advance how many subscribers it expects. This is just a magic number it gets from somewhere.
The publisher starts up and waits for all subscribers to connect. This is the node coordination part. Each subscriber subscribes and then tells the publisher itâs ready via another socket.
When the publisher has all subscribers connected, it starts to publish data.
In this case, weâll use a REQ-REP socket flow to synchronize the subscribers and the publisher (Figure 2-14). The code for the publisher is in Example 2-13.
Example 2-13. Synchronized publisher (syncpub.c)
//
// Synchronized publisher
//
#include "zhelpers.h"
// We wait for 10 subscribers
#define SUBSCRIBERS_EXPECTED 10
int
main
(
void
)
{
void
*
context
=
zmq_ctx_new
();
// Socket to talk to clients
void
*
publisher
=
zmq_socket
(
context ...
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.