3

我有一个关于增加最大帧大小和发送/接收缓冲区大小值的问题。他们能走多高有限制吗?

我将大量数据传递给系统(比如 20mb),然后用于计算一些结果并返回。将上述参数设置为 100mb 会导致消息被丢弃。在这种情况发生之前我可以通过的最大块大约是 5mb。我试图增加连接和确认的超时时间,但似乎没有什么不同。

另外,如果消息被丢弃,有什么方法可以得到通知吗?有时它会发送一个 Dissassociated 错误,有时它只是无所事事。log-frame-size-exceeding = on 和 log-buffer-size-exceeding = 50000 设置似乎没有效果。

任何帮助表示赞赏。谢谢你。

4

2 回答 2

3

您应该将您的消息切成小块并在接收端重构对象。这将使您的重试更容易,并且不会“占用”套接字(例如,如果您通过套接字发送 100mb,那么您将其捆绑起来,因此心跳无法从远程系统通过)。

我写了一篇关于在 Akka.NET 中使用大消息和套接字发生的事情的深入文章,您可能会发现它很有用。但简短的回答是将您的消息切成小块并在接收端重建它,或者更好的是,以流式方式处理它们。

于 2015-07-24T17:47:19.767 回答
2

一般来说,一次将大部分数据推送到网络上是一个坏主意。将它们拆分成更小的部分并逐个发送要好得多(如果有必要,这也可以降低重试策略的成本)。如果你想让你的actor逻辑不知道传输细节,你可以通过定义一对专门的actor来抽象它,它们唯一的工作就是拆分/加入大消息。

此外,正如 Aaron - Helios(Akka.NET 使用的套接字服务器)的创建者 - 提到您不应该使用大消息,因为它们会拉伸服务器的缓冲池大小,但一旦拉伸,它就不会再次缩小。

于 2015-06-25T06:15:21.350 回答