在PUB/SUB
使用. tcp://
_ capnp
_ capnp::messageToFlatArray
在接收方,我收到一条zmq_msg_t
消息中的全部内容。但zmq_msg_data(&message)
返回一个未capnp::word
对齐的内存位置。FlatArrayMessageReader
抛出内存未对齐的异常也是如此。
简化的代码如下所示:
zmq_msg_t message;
zmq_msg_init(&message);
zmq_msg_recv(&message, socket, flags);
size_t size = zmq_msg_size(&message);
auto data = zmq_msg_data(&message);
auto pdata = kj::arrayPtr((const capnp::word*)data, size / sizeof(capnp::word));
capnp::FlatArrayMessageReader msg = capnp::FlatArrayMessageReader(pdata); // exception
什么是在不复制整个缓冲区的情况下对齐数据的好方法?或者有没有办法在没有性能损失的情况下在字对齐的内存中接收消息 - 比如在 zmq 中禁用零复制?
尝试使用 capnp 版本 0.7.0、zeromq 版本 4.3.2 和 gcc 7.4.0 的 ubuntu 18.04。