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
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to