client1/client2/... ==> xreply/xrequest(zmq_device) ==> multi-worker(threads)

I think zmq_device(ZMQ_QUQUE, xreply, xrequest) is what your need.

On 2010-12-19 9:10, Dr Tune wrote:
Hi all,
Firstly,
ZMQ + protocol buffers = awesomeness, thanks! Now I can mix Java and c++ and it all Just Works.

Secondly;
I have a server which has a single thread listening on an XREP socket and distributing incoming requests to a pool of worker threads which process msgs and return a result. My issue is that b/c I can only use the ZMQ socket in the thread that created it, the listen/distribute thread must also be the one that returns the replies, hence I have a loop like this;

1) Poll XREP socket for new messages (non-blocking)
2) If new message, give it to a worker thread (and pass it a handle to a threadsafe queue we have for replies
3) Check reply queue and send() any on the XREP socket
4) if no messages sent or received, sleep for 1ms
5) loop to 1

The problem being that this loop spins needlessly b/c I can't block on step 1 or step 3; blocking on the XREP means any replies won't get sent until next request, blocking on 3 can obviously slow things down ridiculously. I could slow down the spin by increasing sleep in step 4, but that just adds latency to everything.

Obvious solutions would be;
a) if sockets were threadsafe, pass the socket instead of a queue and allow each worker thread to write its XREP as soon as it's done. Then you get rid of steps 3/4 and make step 1 block. b) run a separate thread for getting queue replies and writing to XREP, this could block on the queue, but then I'd be using my XREP socket from two threads.

One workaround I can think of is to disregard the XREQ/XREP thing, use two threads, open a PULL socket on one thread an a PUSH for replies on the other. This sucks for a number of reasons not worth going into.

I seem to be solving this wrong. What's the right way to do this?

Many thanks,
DrTune


_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev


--
Kasicass, co...@work

_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to