[zeromq-dev] What differentiates connected peers on a ZMTP point of view ?

Laurent Alebarde l.alebarde at free.fr
Thu Feb 6 16:34:03 CET 2014


Hi Devs,

I wonder please what differentiates connected peers on a ZMTP point of 
view ?

To be more clear, let's consider this network:

Client 1 205.23.12.47 
---------------------------------------------------- Server
Client 2 102.12.88.254 --------------------------------------------------/

In ZMTP internals, I assume it creates a pipe associated with each 
origin address, and on an API side, it provides one identity associated 
to each one. So it creates one mechanism for each pipe and knows which 
instance to use every time in the stateful handcheck process. Is it 
correct ? there is a bijective association between the origin address 
and the identity ?

Let's say that now we have a proxy in between:


Client 1 205.23.12.47 ----------------------- Proxy 
----------------------- Server
Client 2 102.12.88.254 ------------------/92.123.321.22

ZMTP on server side has no way to differentiate between Client1 and 2. 
Every message arrives in the same pipe which is the one corresponding to 
its closest peer: the proxy and its address. The only way for the server 
to differentiate the clients is at application level, when identities 
are stacked in the former frames of each message ?

I am a bit confused. Can someone clarify for me please and point in the 
libzmq code what is taken into account to identify the pipes ?


So, if my above hypothesis are right, as I want to manage to proxy a 
ZMTP mechanism like in the following:

_______________client A___________________ 
____________________server_________________
proxy                  __worker B __
                     _________tunel A______ _____midpoint_____
Client  --inproc--- frontend   /   backend ----tcp---- frontend / 
backend --inproc-- Worker
DEALER              ZMQ_STREAM      DEALER ROUTER  ZMQ_STREAM            
DEALER
CURVE |              CURVE
|

I have to create a pool of sockets in the proxy backend, say 1,000 if I 
want to authorize 1,000 simultaneous connexions, and dispatch the 
clients to a sticky socket, and one and only one client per socket.
\|/
Client 1 ----------------------------------------------> socket 1: port 
10001
Client 2 ----------------------------------------------> socket 2: port 
10002
Client 1000 ----------------------------------------------> socket 1000: 
port 11000

So, the worker is binded to all these ports. Still, does it work here ?  
Does ZMTP creates a pipe per address on the worker side, even if they 
are binded to the same socket (the answer looks obvious but I prefer a 
confirmation) ?


Cheers,


Laurent
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20140206/73531ad6/attachment.htm>


More information about the zeromq-dev mailing list