On Sep 25, 2012, at 10:05 AM, Dowd, Brian wrote:

> HI Michel,
>   Yes it is a multi-part message on the send side, however the first part is 
> just the identity/destination/address details
> (i.e. client-1/client-2 etc), and the setIdentity() call in the "Client" side 
> of things associates thw two so that when the
> "client-1" is set in the first part the ZMQ layer knows to send that message 
> to the "Client" that connected with identity
> "client-1" .... Also, just in case I did double check the rtdealer.c and it 
> behaves exactly equivalently in that it does not
> loop as you suggest, but does it the same way as my java example more or 
> less, I imagine looping woudl make sense
> when you are not using ROUTER/DEALER and do not know in advance how many 
> parts there are ...
> 
> I dont believe it is the issue here.



I believe your issue is due to a race condition during startup. Simply put, 
when the ROUTER socket binds to an endpoint it does not actually create an 
outgoing queue *until* a client connects to it. So any messages written to the 
ROUTER socket will be dropped at first. Take a look at its behavior as 
documented in the zmq_socket man page. This dropping behavior (when there are 
no connected clients) may not be clear from that man page, but we do have it in 
the FAQ.

http://www.zeromq.org/area:faq

Putting a "sleep" in your server corrects this behavior because it gives the 
client threads a chance to start up and actually connect to the bound endpoint. 
When the ROUTER socket sees a peer, it creates an outgoing queue for it. Any 
subsequent writes to that ROUTER socket can now be placed in the queue (subject 
to any HWM limits).

To solve this, I recommend changing your client. Instead of each client thread 
creating its own context and socket, your main thread should create a single 
context and spawn all of the sockets that you will ever need, connect them, and 
then sleep briefly. Pass this connected socket to your thread constructor.

Also, anyone using ROUTER/DEALER sockets should read this write-up: 
http://www.zeromq.org/tutorials:dealer-and-router

cr

_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to