1

问题:

我可以在不复制的情况下使用另一条消息的一部分初始化一条新消息吗?修改消息以丢弃前几帧也可以。

设想:

我正在使用 ROUTER-REQ 模式来实现负载平衡。REQ 端向 ROUTER 发送消息,ROUTER 将标识和定界符帧添加到消息中。在我的应用程序使用第一帧将工作人员的身份推送到空闲列表后,它需要将消息的最后一帧转发到 PUB 套接字。那些最终的帧可能非常大,在提取第一个身份帧之后,我不再需要接收到的其余消息,只需转发它即可。这似乎是零拷贝的好地方;我只需要删除路由器插入的前两帧。

4

1 回答 1

1

我没试过,但我认为你可以,我会尝试

使用zmq_msg_copy,根据手册页

实现可以选择不物理复制消息内容,而是在 src 和 dest 之间共享底层缓冲区。

我不知道为什么手册页使用“可以选择”,查看我认为它一直都在使用的代码。

在这里,当我谈论消息时,我的意思是“消息部分”。因此,当您创建多部分消息时,您只需对必要的部分(帧)进行零复制

您使用哪种绑定?

于 2013-05-03T21:51:15.237 回答