Let’s switch our client to using a DEALER socket. Our goal here is to make sure we get a reply back within the shortest possible time, no matter whether a particular server is up or down. Our client takes this approach:
We set things up, connecting to all servers.
When we have a request, we blast it out as many times as we have servers.
We wait for the first reply, and take that.
We ignore any other replies.
What will happen in practice is that when all servers are running, ØMQ will distribute the requests so that each server gets one request and sends one reply. When any server is offline and disconnected, ØMQ will distribute the requests to the remaining servers. So, in some cases a server may get the same request more than once.
What’s more annoying for the client is that we’ll get multiple replies back, but there’s no guarantee we’ll get a precise number of replies. Requests and replies can get lost (e.g., if the server crashes while processing a request).
So, we have to number requests and ignore any replies that don’t match the request number. Our Model One server will work because it’s an echo server, but coincidence is not a great basis for understanding, so we’ll make a Model Two server here that chews up the message and returns a correctly numbered reply with the content “OK.” We’ll use messages consisting of two parts: a sequence number and a body.
We’ll begin by starting one or more servers, specifying a bind endpoint each time, as in Example 4-80 ...