I'm still thinking that the second option is better: to use a separate (and dedicated) dealer socket for each RPC
call.

1. Some easy experiments showed that it is possible to create as many as 10000 sockets (in case anyone needs such amount). This is slow, but they are created at startup time and reused, or you can create new sockets by demand, in case they are all in use (and
keep them to be reused)

2. The ROUTER (server side) does not need to be aware and coded to help supporting a RPC number (to match responses with requests). This means that you can do RPC only with a library for the client (DEALER) and this will work with ANY existing server (ROUTER).

El 18/12/15 a las 11:09, Doron Somech escribió:
I disagree, I think the first option is the right one, and much faster (you don't have to create sockets).

The server (router) doesn't really need to understand it, only use it when reply.

So the first frame is the routing id (aka identity), make the next frame the request id, now when the router reply it has to push the routing id and the request id before the reply.

Another way to do it is to create inproc socket for each request (this is also expensive) like so:

REQ connect to inproc

PROXY
               ROUTER bind on inproc
               DEALER connect to server

REP - bind to server address.

With this you have the request id automatically inside the message frames by zeromq sockets (you have two routing ids pushed to the message frames, first one of the REQ socket and second one of the DEALER socket).

Anyway just do the zeromq socket logic without using the complex chaining.




On Fri, Dec 18, 2015 at 11:55 AM, cibercitizen1 <[email protected] <mailto:[email protected]>> wrote:


    Sorry if here is not the right place to ask this.

    I'm considering to implement simple RPC over
    a DEALER-ROUTER connection. Thus, I'm facing
    the obvious problem of matching the answers from the
    router side with the corresponding requests by the
    dealer side.

    Options considered:

    1. number each request. Cons: the server (router side) must be
       aware of this, and participate in the strategy.

    2. use a separate (and dedicated) dealer socket for each RPC
    call. (Using a pool of reusable open connections so as to
    save time). Pros: this is transparent to the server.

    Is there any other option?

    Am I right that option 2 is the best?

    Thank you for any comment.

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




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

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

Reply via email to