在ZeroMQ中接收消息而不预定义C#中的缓冲区

时间:2013-10-18 10:11:55

标签: c# performance zeromq

目前,当在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的大小。任何方式只是在没有预定义缓冲区大小的情况下完全接收消息然后将其修改为数组?

1 个答案:

答案 0 :(得分:0)

您可以将发件人编码为两部分发送邮件。

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

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

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