通过ZeroMQ以字符串形式接收对象,然后通过另一个套接字以零拷贝发送对象的正确方法是什么



我收到一个使用ZeroMQ:的大型序列化二进制对象

std::unique_ptr<Message> input(CreateMessage());
if (Receive(input, "data") > 0) {
    std::string serialStr(static_cast<char*>(input->GetData()), input->GetSize());
}

如何通过另一个套接字发送此对象以避免不必要的memcpy

std::unique_ptr<Message> output(CreateMessage(serialStr.length()));
memcpy(output->GetData(), serialStr.c_str(), serialStr.length());
fChannels.at("data2").at(0).Send(output);

此外,使用std::string来包含二进制对象是个好主意,还是应该使用void*

如果你所做的只是转发,那么你可以使用相同的消息,你可以使用类似的东西:

std::unique_ptr<Message> input(CreateMessage());
if (Receive(input, "data") > 0)
{
    fChannels.at("data2").at(0).Send(input);
}

或者,您可以查看4参数消息构造函数,以使用现有缓冲区作为消息负载,而不是复制。

最新更新