[zeromq-dev] [jzmq] xreq/xrep sockets and thread safety
Matt Weinstein
matt_weinstein at yahoo.com
Thu Aug 12 21:42:42 CEST 2010
There's an ongoing discussion about this. A hard failure may be
difficult for some environments, you're correct.
A thought --
I'm beginning to think that error options should be a ØMQ compile time
option, e.g. replace all of the asserts with e.g.:
if (rc)
return zmq_error(int errno, const char* what);
Then zmq_error(...) can abort or return an errno depending on the
compile time (or dynamic?) implementation of zmq_error.
If there are places where something can't happen, you can call
zmq_abort(...) with the same args.
On Aug 12, 2010, at 3:21 PM, Alexey Ermakov wrote:
> Thanks, that sounds like an easy solution.
> I'm using jzmq, though, so I'll have to implement the device myself
> (there are no java bindings for zmq devices; my c++ is rusty, so I
> doubt I'd be able to implement them with our current time
> constraints; I don't like the idea of having to configure and spawn
> an additional process for this).
> I've tried playing with XREQ/XREP sockets and they seem simple
> enough. There's a catch, though: if I do a send() a message to an
> XREP socket with no ZMQ_SNDMORE set (and I haven't sent the identity
> first), it crashes with an assertion failure, instead of returning
> an error. Is that really a good idea, considering that it's a rather
> simple mistake to make and the library is supposed to be used in
> other languages? Current behavior it means that if I have any sort
> of bugs in my device code, the whole JVM will crash.
>
> On Thu, Aug 12, 2010 at 9:23 PM, Matt Weinstein <matt_weinstein at yahoo.com
> > wrote:
> The DEVICE service thread is not designed for processing "stuff".
>
> One design: two threads on your side -- one which is an async request
> thread (unless you get some form of signal) and an async response
> handler.
>
> [ clients ] [ REQ ] == [ XREP ] == [ DEVICE ] + 2 streams:
>
> ==> [ ZMQ_PUSH ] == [ ZMQ_PULL ] [ ASYNC_REQUESTER ]
> <== [ ZMQ_PULL ] == [ ZMQ_PUSH ] [ ASYNC_HANDLER ]
>
> I'm presuming the async API can efficiently share state between the
> two ASYNC_* threads.
>
> What are you actually making requests to...?
>
> Use zmq_reactor to build DEVICE (use the poll_items branch).
>
>
> On Aug 12, 2010, at 1:09 PM, Alexey Ermakov wrote:
>
> > Hi everyone,
> >
> > I'm trying to figure out how to deal with the thread safety
> > restriction of 0MQ sockets. As I understand, they are bound to a
> > thread, which means that I write/read to the same socket from
> > multiple threads (which is possible with Java Posix socket
> > wrappers). I'm trying to figure out how to implement a rather simple
> > task and I can't think of a decent solution.
> > My application is a Scala-based server that has an XREP socket,
> > processes the requests, and replies back. The catch is that request
> > processing is implemented by forwarding a request to another service
> > using an asynchronous API. How am I supposed to send the replies
> > back, if the XREP socket is bound to the thread that is basically
> > blocked on "while (true) socket.recv()"? I suppose I could do a 50ms
> > poll on the socket and then process the replies (fetching them from
> > a LinkedBlockedQueue or something), but that would be inefficient,
> > because requests/replies happen much less frequently. Another
> > solution would be replacing all inter-thread communication with 0MQ
> > sockets and doing a poll() on these sockets in the request handler,
> > but that doesn't sound very nice.
> > Is there an easier solution I'm overlooking?
> > _______________________________________________
> > zeromq-dev mailing list
> > zeromq-dev at lists.zeromq.org
> > http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20100812/d89edf3f/attachment.htm>
More information about the zeromq-dev
mailing list