Пример способа отправки сообщений с использованием 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, но это несколько сложнее.