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

Patrik Wenger paddor at gmail.com
Wed Feb 14 22:25:44 CET 2018


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 
> REQ-ROUTER-DEALER-REP set up
> 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 
> <mailto:justin.azoff at gmail.com>> wrote:
>
>     On Wed, Feb 14, 2018 at 12:28 PM, Patrik VV. <paddor at gmail.com
>     <mailto: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 <mailto:zeromq-dev at lists.zeromq.org>
>     https://lists.zeromq.org/mailman/listinfo/zeromq-dev
>     <https://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/6147ea2e/attachment.htm>


More information about the zeromq-dev mailing list