在 ZeroMQ 中接收消息,而无需在 C# 中预定义缓冲区

本文关键字:预定义 缓冲区 ZeroMQ 消息 | 更新日期: 2023-09-27 18:36:05

当前在ZMQ中接收二进制消息时,我必须执行以下操作:

int maxMessageSize = 1024*500*16*                            
var buffer = new byte[maxMessageSize];
var messageLength = socket.Receive(buffer);
var message = new ArraySegment<byte>(buffer, 0, messageLength).ToArray();

这有一个主要问题: 我必须提前知道最大消息大小,我不知道。消息的大小可以从 1KB 到 20MB 不等。有什么方法可以在没有预定义缓冲区大小的情况下完全接收消息,然后将其修剪成一个数组?

在 ZeroMQ 中接收消息,而无需在 C# 中预定义缓冲区

您可以对发件人进行编码,以分两部分发送消息。

第一部分是缓冲区大小(int)可以用socket.SendMore()发送。

第二部分缓冲区本身与常规socket.Send()

maxMessageSize设置为第一个socket.Receive(),然后再次使用正确的缓冲区大小socket.Receive()