Как отправить сообщение Cap’n Proto через ZMQ

Пример способа отправки сообщений с использованием Cap’n Proto требует дескриптор файла для записи в:

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

Но в ZMQ сообщение должно быть передано функции ZMQ:

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

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

Как можно решить эту несовместимость?

3

Решение

Две возможности:

  1. использование capnp::messageToFlatArray() чтобы получить сообщение в виде одного плоского массива. Обратите внимание, что для этого необходимо сделать копию содержимого сообщения.
  2. Отправьте сообщение как сообщение из нескольких частей ZeroMQ, причем части являются сегментами сообщения. capnp::MessageBuilder::getSegmentsForOutput() возвращает массив массивов, указывающих на необработанные сегменты сообщения. capnp::SegmentArrayMessageReader принимает такой массив массивов в качестве входных данных. Если вы можете отправить массив массивов как составное сообщение, вы можете пропустить, используя capnp/serialize.h вообще, поскольку его единственная цель — объединить сегменты в одно сообщение с таблицей сегментов. В вашем случае ZeroMQ будет отвечать за запоминание того, где начинается и заканчивается каждый сегмент.

Я рекомендую № 2, но это несколько сложнее.

8

Другие решения


По вопросам рекламы [email protected]