在 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 不等。有什么方法可以在没有预定义缓冲区大小的情况下完全接收消息,然后将其修剪成一个数组?
您可以对发件人进行编码,以分两部分发送消息。
第一部分是缓冲区大小(int
)可以用socket.SendMore()
发送。
第二部分缓冲区本身与常规socket.Send()
。
将maxMessageSize
设置为第一个socket.Receive()
,然后再次使用正确的缓冲区大小socket.Receive()
。