如何通过ZMQ发送Cap' n Proto消息

时间:2015-08-17 00:35:57

标签: c++ c zeromq capnproto

使用Cap' n发送消息的示例方法需要一个文件描述符来写入:

     ::capnp::writeMessageToFd(fd, message);

但是在ZMQ中,消息需要传递给ZMQ函数:

    zmq_send(requester, "Hello", 5, 0);

http://zguide.zeromq.org/page:all

如何解决这种不兼容问题?

1 个答案:

答案 0 :(得分:8)

两种可能性:

  1. 使用capnp::messageToFlatArray()将消息作为单个平面阵列获取。请注意,这需要复制邮件内容。
  2. 将消息作为ZeroMQ多部分消息发送,部分是消息的段。 capnp::MessageBuilder::getSegmentsForOutput()返回指向原始消息段的数组数组。 capnp::SegmentArrayMessageReader将这样的数组数组作为输入。如果您可以将数组数组作为多部分消息发送,那么您可以完全跳过使用capnp/serialize.h,因为它的唯一目的是将这些段组合成一个带有段表的消息。在您的情况下,ZeroMQ将负责记住每个段的开始和结束位置。
  3. 我推荐#2,但它有点复杂。