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

How to Send Cap'n Proto Message over ZMQ

本文关键字:原型 消息 何通过 ZMQ 发送 Cap      更新时间:2023-10-16

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

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

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

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

http://zguide.zeromq.org/page:所有

如何解决这个不兼容?

两种可能:

  1. 使用capnp::messageToFlatArray()作为单个平面数组获取消息。注意,这需要创建消息内容的副本。
  2. 将消息作为ZeroMQ多部分消息发送,其中部分为消息的段。capnp::MessageBuilder::getSegmentsForOutput()返回指向原始消息段的数组的数组。capnp::SegmentArrayMessageReader以这样一个数组的数组作为输入。如果您可以将数组的数组作为多部分消息发送,那么您完全可以跳过使用capnp/serialize.h,因为它的唯一目的是将段与段表组合成单个消息。在您的情况下,ZeroMQ将负责记住每个段的开始和结束位置。

我推荐#2,但它有点复杂。