[zeromq-dev] Bidirectional Async Over TCP Without Multiple Binds

Jake jake.cobb at gmail.com
Wed Feb 14 22:40:29 CET 2018

Ok, thanks for the explanation and doc reference.  My A node spawns the B
nodes in the
first place, so I guess I can either (1) assign the identity out-of-band at
spawn time and
have the B use it, or (2) have B handshake once at start up to allow A to
associate the
zmq-assigned identity.  After that B just receives and sends on DEALER;
without other
sockets connected there is no load balancing on B's end.  Node A uses the
identity association
to send to a particular B and to recognize which B is sending when it
receives a message.


On Wed, Feb 14, 2018 at 4:25 PM, Patrik Wenger <paddor at gmail.com> wrote:

> Hi Jake
> In fact, most ZMQ socket types do some sort of load balancing when
> connected with multiple other sockets. See [1], especially the "Outgoing
> routing strategy" and "Incoming routing strategy" in the table for each
> socket type. TL;DR if the socket allows receiving messages and is connected
> to multiple other sockets, it will try to read from all of those sockets
> "fairly". If the socket allows sending messages and is connected to
> multiple other sockets, it will usually round-robin when sending.
> Of course PUB (and RADIO) will not round-robin, but "fan out" instead,
> meaning all connected sockets will receive every message.
> And ROUTER is an exception too: When sending, it uses the first message
> part (set by the application) to determine the correct receiver. This
> allows you to send a message to one specific connected socket. When
> receiving, it prepends a message part that identifies the socket which sent
> the message. Your application will have to inspect that first part to know
> who is its sender. These two things will have to happen in your A node. The
> DEALER sockets in your B nodes will have to set an identity to be
> distinguishable in A's ROUTER socket.
> Regards,
> Patrik
> [1] http://api.zeromq.org/4-2:zmq-socket
> On 14.02.2018 20:17, Jake wrote:
> Isn't ROUTER-DEALER load balancing though?  I've used it in a
> but in that case the REQ -> ROUTER send does not target a particular
> handler on the other side, it
> just goes to an arbitrary one and the ROUTER makes sure the reply goes
> back to the original sender.
> How would my sender (an A node) target a particular B node to receive a
> message?
> -Jake
> On Wed, Feb 14, 2018 at 12:34 PM, Justin Azoff <justin.azoff at gmail.com>
> wrote:
>> On Wed, Feb 14, 2018 at 12:28 PM, Patrik VV. <paddor at gmail.com> wrote:
>> > Hi
>> >
>> > Not sure why Justin suggested using a ROUTER-Socket on each side.
>> Ah yes, I misread the original message. For "one-to-many" you would
>> use router-dealer.  router+router would be more for many-to-many where
>> each node runs the same code and there is no obvious master node.
>> --
>> - Justin
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> _______________________________________________
> zeromq-dev mailing listzeromq-dev at lists.zeromq.orghttps://lists.zeromq.org/mailman/listinfo/zeromq-dev
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> https://lists.zeromq.org/mailman/listinfo/zeromq-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20180214/3adfc110/attachment.htm>

More information about the zeromq-dev mailing list