使用 Cap'n Proto 发送消息的示例方法需要一个文件描述符来写入:
::capnp::writeMessageToFd(fd, message);
但在 ZMQ 中,消息需要传递给 ZMQ 函数:
zmq_send(requester, "Hello", 5, 0);
http://zguide.zeromq.org/page:all
如何解决这种不兼容问题?
使用 Cap'n Proto 发送消息的示例方法需要一个文件描述符来写入:
::capnp::writeMessageToFd(fd, message);
但在 ZMQ 中,消息需要传递给 ZMQ 函数:
zmq_send(requester, "Hello", 5, 0);
http://zguide.zeromq.org/page:all
如何解决这种不兼容问题?
两种可能:
capnp::messageToFlatArray()
将消息作为单个平面数组获取。请注意,这需要复制消息内容。capnp::MessageBuilder::getSegmentsForOutput()
返回指向原始消息段的数组数组。capnp::SegmentArrayMessageReader
将这样一个数组数组作为输入。如果您可以将数组数组作为多部分消息发送,那么您可以完全跳过使用capnp/serialize.h
,因为它的唯一目的是将段组合成带有段表的单个消息。在您的情况下,ZeroMQ 将负责记住每个段的开始和结束位置。我推荐#2,但它有点复杂。