[zeromq-dev] CZMQ and Server and Client Sockets
Doron Somech
somdoron at gmail.com
Mon Aug 17 13:31:00 CEST 2015
I made a pull request to remove the poller field, fd is used instead.
Also I renamed the new poller type to pollfd.
https://github.com/zeromq/libzmq/pull/1534
I also updated the gist on how to use polling on thread safe sockets:
https://gist.github.com/somdoron/902169bf115d3534bd24
On Mon, Aug 17, 2015 at 2:16 PM, Pieter Hintjens <ph at imatix.com> wrote:
> "client id" suggests that it's the ID of the client. Always confusing,
> such relative terms.
>
> Consistency across the ZeroMQ universe would be useful here IMO.
>
> On Mon, Aug 17, 2015 at 1:07 PM, Doron Somech <somdoron at gmail.com> wrote:
> > I followed the zproto naming, I actually think that for the server-client
> > context "client id" might be better...
> >
> > On Mon, Aug 17, 2015 at 1:36 PM, Pieter Hintjens <ph at imatix.com> wrote:
> >>
> >> +1 for this and for using "routing id" instead of "identity"... it's a
> >> change I'd like to make everywhere, deprecating the old (misleading)
> >> name.
> >>
> >> On Mon, Aug 17, 2015 at 11:04 AM, Doron Somech <somdoron at gmail.com>
> wrote:
> >> > No problem, I also agree as I think we need minimal change.
> >> >
> >> > I made the change:
> >> >
> >> >
> https://github.com/somdoron/libzmq/commit/5bae6911afba90de42b9fd21315f6d702e1bb2c6
> >> >
> >> > I will wait with the PR until other will weigh in.
> >> >
> >> > Also I think the poller name is not great, I prefer another but didn't
> >> > come
> >> > up with a good one, few alternatives:
> >> > * signaler - it is the internal name in libzmq
> >> > * efd - for event fd
> >> > * polling_fd
> >> > * poll_fd
> >> > * pollfd
> >> >
> >> > What do you think?
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > On Mon, Aug 17, 2015 at 10:29 AM, KIU Shueng Chuan <
> nixchuan at gmail.com>
> >> > wrote:
> >> >>
> >> >> The structure of zmq_pollitem_t is part of the public api and abi.
> All
> >> >> existing programs would require a recompile.
> >> >>
> >> >> Perhaps others would like to weigh in on this?
> >> >>
> >> >> On 17 Aug 2015 14:17, "Doron Somech" <somdoron at gmail.com> wrote:
> >> >>>
> >> >>> A little nasty but will work, I already have the zmq_poller_get_fd
> >> >>> method
> >> >>> (right now it is not public).
> >> >>> I will make the change.
> >> >>>
> >> >>> What disadvantage do you see to the change of the structure?
> >> >>>
> >> >>> On Mon, Aug 17, 2015 at 6:11 AM, KIU Shueng Chuan <
> nixchuan at gmail.com>
> >> >>> wrote:
> >> >>>>
> >> >>>> Do you think it would be worthwhile to preserve ABI compatibility
> of
> >> >>>> the
> >> >>>> zmq_pollitem_t structure?
> >> >>>>
> >> >>>> Perhaps for threadsafe sockets, the user could extract the fd of
> the
> >> >>>> poller object and populate the pollitem fd field himself?
> >> >>>>
> >> >>>> e.g.
> >> >>>> socket!=NULL && fd!=0 ==> threadsafe zmq socket
> >> >>>> socket!=NULL && fd==0 ==> regular zmq socket
> >> >>>> socket==NULL ==> regular TCP socket (or any fd on unix)
> >> >>>>
> >> >>>>
> >> >>>> On Sun, Aug 16, 2015 at 11:06 PM, Doron Somech <somdoron at gmail.com
> >
> >> >>>> wrote:
> >> >>>>>
> >> >>>>> so, I made a pull request to fix the issue, moving field to the
> end
> >> >>>>> of
> >> >>>>> struct:
> >> >>>>>
> >> >>>>> https://github.com/zeromq/libzmq/pull/1526
> >> >>>>>
> >> >>>>> On Sun, Aug 16, 2015 at 5:54 PM, Doron Somech <somdoron at gmail.com
> >
> >> >>>>> wrote:
> >> >>>>>>
> >> >>>>>> I will try to fix that...
> >> >>>>>>
> >> >>>>>> On Sun, Aug 16, 2015 at 5:43 PM, KIU Shueng Chuan
> >> >>>>>> <nixchuan at gmail.com>
> >> >>>>>> wrote:
> >> >>>>>>>
> >> >>>>>>> Hello, the new definition for zmq_pollitem_t would break code
> like
> >> >>>>>>> the following:
> >> >>>>>>>
> >> >>>>>>> zmq_pollitem_t pollitems [] = {
> >> >>>>>>> { zsock, 0, ZMQ_POLLIN, 0 },
> >> >>>>>>> { NULL, fd, ZMQ_POLLIN, 0 }
> >> >>>>>>> };
> >> >>>>>>>
> >> >>>>>>> On 16 Aug 2015 19:10, "Doron Somech" <somdoron at gmail.com>
> wrote:
> >> >>>>>>>>
> >> >>>>>>>> So I made a pull request which add polling on multiple sockets:
> >> >>>>>>>>
> >> >>>>>>>> https://github.com/zeromq/libzmq/pull/1525
> >> >>>>>>>>
> >> >>>>>>>> Polling on thread safe sockets is a little different then
> regular
> >> >>>>>>>> socket, take a look at the gist:
> >> >>>>>>>>
> >> >>>>>>>> https://gist.github.com/somdoron/902169bf115d3534bd24
> >> >>>>>>>>
> >> >>>>>>>> Next is making a pull request to CZMQ to use the new ability.
> >> >>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>> On Sun, Aug 16, 2015 at 12:53 AM, Brian Knox
> >> >>>>>>>> <bknox at digitalocean.com> wrote:
> >> >>>>>>>>>
> >> >>>>>>>>> Makes sense to me! The API is close enough to the other
> poller
> >> >>>>>>>>> implementations that there's no surprises.
> >> >>>>>>>>>
> >> >>>>>>>>> Cheers!
> >> >>>>>>>>> Brian
> >> >>>>>>>>>
> >> >>>>>>>>> On Sat, Aug 15, 2015 at 5:21 PM, Doron Somech
> >> >>>>>>>>> <somdoron at gmail.com>
> >> >>>>>>>>> wrote:
> >> >>>>>>>>>>
> >> >>>>>>>>>> Polling on multiple thread safe socket is a little bit
> >> >>>>>>>>>> different,
> >> >>>>>>>>>> because thread safe doesn't have a FD, so we need to create
> one
> >> >>>>>>>>>> for all
> >> >>>>>>>>>> thread safe sockets for each thread before calling the
> >> >>>>>>>>>> zmq_poll.
> >> >>>>>>>>>>
> >> >>>>>>>>>> So I want to make it very close to the current API, this
> what I
> >> >>>>>>>>>> have so far:
> >> >>>>>>>>>>
> >> >>>>>>>>>> https://gist.github.com/somdoron/902169bf115d3534bd24
> >> >>>>>>>>>>
> >> >>>>>>>>>> zmq_poller_t is actually a FD, when added to the thread safe
> >> >>>>>>>>>> socket the socket will signal it once a command is ready,
> >> >>>>>>>>>> multiple sockets
> >> >>>>>>>>>> can use the same poller. When signalled the zmq_poll will
> check
> >> >>>>>>>>>> all sockets
> >> >>>>>>>>>> for events.
> >> >>>>>>>>>>
> >> >>>>>>>>>> What do you think?
> >> >>>>>>>>>>
> >> >>>>>>>>>>
> >> >>>>>>>>>>
> >> >>>>>>>>>> On Sat, Aug 15, 2015 at 5:54 PM, Brian Knox
> >> >>>>>>>>>> <bknox at digitalocean.com> wrote:
> >> >>>>>>>>>>>
> >> >>>>>>>>>>> Doron - as a heads up, being able to poll multiple sockets
> >> >>>>>>>>>>> from
> >> >>>>>>>>>>> zpoller would be of great interest to me (I use zpoller in
> >> >>>>>>>>>>> goczmq quite a
> >> >>>>>>>>>>> bit).
> >> >>>>>>>>>>>
> >> >>>>>>>>>>> Cheers,
> >> >>>>>>>>>>> Brian
> >> >>>>>>>>>>>
> >> >>>>>>>>>>> On Sat, Aug 15, 2015 at 3:48 AM, Doron Somech
> >> >>>>>>>>>>> <somdoron at gmail.com> wrote:
> >> >>>>>>>>>>>>
> >> >>>>>>>>>>>> Andrew are you using CZMQ? which class do you use for
> >> >>>>>>>>>>>> multiple
> >> >>>>>>>>>>>> polling, zloop or zpoller?
> >> >>>>>>>>>>>>
> >> >>>>>>>>>>>> On Fri, Aug 14, 2015 at 10:36 PM, Andrew Simpson
> >> >>>>>>>>>>>> <simpsonar77 at yahoo.com> wrote:
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> this sounds really excellent! I am building an
> application
> >> >>>>>>>>>>>>> that would greatly benefit from this over a standard
> >> >>>>>>>>>>>>> Router/Dealer setup.
> >> >>>>>>>>>>>>> The only thing that will hold me back right now is the
> lack
> >> >>>>>>>>>>>>> of polling on
> >> >>>>>>>>>>>>> multiple client/server sockets. I definitely need that.
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> Good stuff!
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> On Friday, August 14, 2015 9:09 AM, Doron Somech
> >> >>>>>>>>>>>>> <somdoron at gmail.com> wrote:
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> Hi All,
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> I added server and client sockets support to CZMQ, you can
> >> >>>>>>>>>>>>> take
> >> >>>>>>>>>>>>> a look at the change at the following pull request:
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> https://github.com/zeromq/czmq/pull/1059
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> Server socket is like router socket except you don't have
> an
> >> >>>>>>>>>>>>> identity frame, each message also include routing id which
> >> >>>>>>>>>>>>> is an int (vs
> >> >>>>>>>>>>>>> byte array). So each message coming from a server socket
> >> >>>>>>>>>>>>> include a routing
> >> >>>>>>>>>>>>> id which can be retrieve by calling zframe_routing_id.
> When
> >> >>>>>>>>>>>>> sending a
> >> >>>>>>>>>>>>> message you must set the routing id by calling
> >> >>>>>>>>>>>>> zframe_set_routing_id. You
> >> >>>>>>>>>>>>> can use zframe_send_reply with both the destination frame
> >> >>>>>>>>>>>>> and the source
> >> >>>>>>>>>>>>> frame (which include the routing id), the method copy the
> >> >>>>>>>>>>>>> routing id from
> >> >>>>>>>>>>>>> the source frame to the destination frame and then send
> the
> >> >>>>>>>>>>>>> message.
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> Client socket is same as dealer socket. Client and Server
> >> >>>>>>>>>>>>> can
> >> >>>>>>>>>>>>> only talk to each other.
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> Following is a small example on how to use the new client
> >> >>>>>>>>>>>>> and
> >> >>>>>>>>>>>>> server sockets:
> >> >>>>>>>>>>>>> https://gist.github.com/somdoron/542b74922f652d229566
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> Client and server socket are thread safe (currently only
> >> >>>>>>>>>>>>> support single frame messages but that might change, I
> >> >>>>>>>>>>>>> think) so if your
> >> >>>>>>>>>>>>> protocol is single frame you can use the server and client
> >> >>>>>>>>>>>>> sockets from
> >> >>>>>>>>>>>>> multiple threads.
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> Polling on multiple client or server sockets is not
> >> >>>>>>>>>>>>> supported
> >> >>>>>>>>>>>>> yet.
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> In the coming week I plan to also add zproto support and
> >> >>>>>>>>>>>>> complete the polling on multiple sockets.
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> Doron
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>>
> >> >>>>>>>>>>>>> _______________________________________________
> >> >>>>>>>>>>>>> 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
> >> >>>>>>>>>>>>
> >> >>>>>>>>>>>
> >> >>>>>>>>>>>
> >> >>>>>>>>>>> _______________________________________________
> >> >>>>>>>>>>> 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
> >> >>>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>>
> >> >>>>>>>> _______________________________________________
> >> >>>>>>>> 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
> >> >>>>>
> >> >>>>
> >> >>>>
> >> >>>> _______________________________________________
> >> >>>> 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
> >> >>
> >> >
> >> >
> >> > _______________________________________________
> >> > 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
> >
> _______________________________________________
> 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/20150817/0c4d8d32/attachment.htm>
More information about the zeromq-dev
mailing list