There has been a zmq_sendiov/recviov call for ages, undocumented and rarely used. This would indeed be a good alternative to multipart for the zerocopy use case.
On Mon, Feb 2, 2015 at 10:59 PM, Maurice Barnum <m...@yahoo-inc.com> wrote: > Is there any thought to adding a writev() analogue like zmq_msg_sendv()? > > One of the reasons I send send multiple frames is to avoid stitching together > buffers just to call send, which something like writev() would address that > use > without the complexity of the socket buffering the parts. > > On Monday, February 2, 2015 8:36 AM, Joe McIlvain <joe.eli....@gmail.com> > wrote: > > > > In my opinion, maintaining some kind of multi-frame abstraction at the API > level is in fact very useful to applications, even if they are sent > atomically on the implementation level as you describe. > > For example, in CZMQ It's quite useful in program flow to be able to push or > pop a single zframe onto or off of a zmsg, then send that zmsg as an entire > message. Rarely do I find myself using zframe_send or zframe_recv with the > "send more" and "receive more" flags in a CZMQ application. The CZMQ > "picture" messages are nice, but they are not always the easiest API to > integrate into an application. Having zmsg and zframe remain (or something > like them), while removing zframe_send and zframe_recv could ease > applications relying on multi-frame semantics into the transition. The > implementation for zmsg would simply serialize the frames in some > zmsg-determined way into a single-part zmq_msg to send and deserialize > according to the same scheme to receive. This multi-frame serialization > essentially be at the application level rather than at the ZMTP level. > > In short, I think a multi-frame abstraction is important for applications, > but if we remove the ability to send one frame at a time at the fundamental > level, this abstraction can remain at a higher level (whether in libzmq, or > in CZMQ and other wrappers) and coexist happily with the proposed changes. > > > > > On Mon, Feb 2, 2015 at 7:37 AM, Doron Somech <somdo...@gmail.com> wrote: > > So the new sockets are in the github master, you can take a loot at the test > to see how to use the new routing id field: >> >>https://github.com/zeromq/libzmq/blob/master/tests/test_client_server.cpp >> >> >>Few of the reasons I didn't like multi frames: >> >>* I tried in the past to make both zeromq and NetMQ thread safe, think of >>sending from multiple threads or receiving from multiple threads. we cannot >>do that with Multipart. >> >>* There are a lot of good transport that already implement message framing >>(UDP, WebSockets, SCTP and even HTTP), but because zeromq required it is own >>framing it was not easy to add them. >> >>* Multipart, router usage (routing id frame) and not being thread safe make >>the learning curve of zeromq hard to beginners. Without three of them zeromq >>become much simpler. >> >>* At least with NetMQ single part message is much faster than multipart. >> >>* New stacks, multipart is complicated to implement, with the new API it will >>much more easier to implement new stacks (like JSMQ) or any native stack. >> >> >> >>Pieter I'm looking forward to see how you expose the routing id in the czmq >>API. >>I also like the czmq API for sending mutlipart messages (the picture feature) >>so maybe we can use that to generate single frame which is also compatible >>with zproto. >> >> >>About the implementation, none of new sockets support any option now. server >>behave like mandatory router, so when router is not reachable or highwater >>mark is reached an error will be returned. >> >> >>As ZMTP 3.1 is still in raw status, what do you think of removing the >>multipart from it? maybe the 3.1 will only support the new socket types. >> >> >> >>Anyway I really excited about this change. >> >> >> >> >> >> >> >> >> >>On Mon, Feb 2, 2015 at 4:17 PM, Thomas Rodgers <rodg...@twrodgers.com> wrote: >> >>What we really want IMO is per-peer metadata, and an API to get/set >>>>this. Using messages is a hack. >>> >>> >>>Currently working on that :) >>> >>> >>>Having two layers that both >>>>carry per-message data is... wrong IMO. >>> >>>Protocols supporting 'out of band' data aren't exactly uncommon. >>> >>> >>> >>>However the key thing is, what's the problem. Then we can discuss >>>>solutions to that. >>> >>> >>>I don't have an immediate use-case justifying it. I noted it, mostly because >>>it has come up a few times since I started paying attention. >>> >>> >>>On Mon, Feb 2, 2015 at 7:55 AM, Pieter Hintjens <p...@imatix.com> wrote: >>> >>>> It seems to me that in order to remove multi-part messages and introduce >>>> new >>>>> socket types (e.g. SERVER/CLIENT) that would >>>>> necessitate a revision of the wire protocol. If we are going to do that, >>>>> it >>>>> might be worth considering per-message >>>>> metadata - >>>> >>>>We'd have to be very clear about the problem that per-message metadata >>>>is aiming for. There is an elegance to delivering blobs and nothing >>>>more. Metadata can be added on top using zproto. >>>> >>>>What we really want IMO is per-peer metadata, and an API to get/set >>>>this. Using messages is a hack. If we are sending/receiving data on a >>>>per-message basis, that is the message. Having two layers that both >>>>carry per-message data is... wrong IMO. >>>> >>>>However the key thing is, what's the problem. Then we can discuss >>>>solutions to that. >>>> >>>>-Pieter >>>> >>>>_______________________________________________ >>>>zeromq-dev mailing list >>>>zeromq-dev@lists.zeromq.org >>>>http://lists.zeromq.org/mailman/listinfo/zeromq-dev >>>> >>> >>>_______________________________________________ >>>zeromq-dev mailing list >>>zeromq-dev@lists.zeromq.org >>>http://lists.zeromq.org/mailman/listinfo/zeromq-dev >>> >>> >> >>_______________________________________________ >>zeromq-dev mailing list >>zeromq-dev@lists.zeromq.org >>http://lists.zeromq.org/mailman/listinfo/zeromq-dev >> >> > > > _______________________________________________ > zeromq-dev mailing list > zeromq-dev@lists.zeromq.org > http://lists.zeromq.org/mailman/listinfo/zeromq-dev > _______________________________________________ > zeromq-dev mailing list > zeromq-dev@lists.zeromq.org > http://lists.zeromq.org/mailman/listinfo/zeromq-dev _______________________________________________ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev