[zeromq-dev] timeout issue

Chuck Remes cremes.devlist at mac.com
Mon Sep 20 16:24:11 CEST 2010


On Sep 19, 2010, at 8:00 AM, liyongyan wrote:

> Can I ask another question?
> I use the zmq_poll() in REQ-REP pattern
> When the client send a Req and then wait for res from the server ,
> but the Res can not reach the client in time for some reasons(for example, handle the Req for a long time),
> then the client wait timeout, now how to handle the socket?
> If I call the zmq_close()  and  next time when send a Req I build another socket and connect server again,
> what happen after the server send the delayed Res? What will server do in ZMQ with the former connection to the client?
>  Will the server release the related resource assigned to the former connection?

Timeouts are not handled by 0mq. You must create the logic in your application to deal with these issues yourself.

This may be covered in the user guide. Check http://zguide.zeromq.org/chapter:1

If not, here is how I would suggest you try to handle this in your application.

1. Use a XREP socket on your server. The XRE? sockets do *not* enforce a strict send/recv ordering like the REQ/REP sockets.

2. After you call zmq_close() on the original REQ socket that timed out, make sure that the *new* REQ socket you build has the same identity as the old one. I *think* 0mq will honor that (use zmq_setsockopt(IDENTITY, x) to set it) for routing a delayed response back to you. Again, your application will need to know how to handle a delayed response.

3. When you call zmq_close() on a socket now, any messages in progress will be dropped. 0mq releases all resources associated with the now dead socket.

cr


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.zeromq.org/pipermail/zeromq-dev/attachments/20100920/23992dc8/attachment.htm 


More information about the zeromq-dev mailing list