0
我收到一个大的,系列化,二进制使用ZeroMQ
对象:也通过ZeroMQ接收对象为字符串的正确方法是什么,然后通过另一个套接字通过零拷贝发送它?
std::unique_ptr<Message> output(CreateMessage(serialStr.length()));
memcpy(output->GetData(), serialStr.c_str(), serialStr.length());
fChannels.at("data2").at(0).Send(output);
,它是一个:
std::unique_ptr<Message> input(CreateMessage());
if (Receive(input, "data") > 0) {
std::string serialStr(static_cast<char*>(input->GetData()), input->GetSize());
}
如何可以通过另一个套接字发送这个对象,避免了不必要的memcpy
好主意使用std::string
来包含一个二进制对象,或者我应该使用一个void*
in代替?
如果我想首先检查消息(即反序列化),只有在符合某个标准时才转发它,该怎么办?我仍然可以在这种情况下转发收到的消息吗?在上面的代码示例中,我猜你的意思是 fChannels.at(“data2”)。at(0).Send(input); – charis
我确实。从缓冲区创建一个std :: string将会创建一个副本并保持消息不变,因此可以工作。但是,在'Send'调用之后的某个时间点,'input'的内容将被zeromq删除/释放,所以在此之前创建你的字符串。 – David