【问题标题】:Akka.Net Sending huge messages (maximum-frame-size)Akka.Net 发送大量消息(最大帧大小)
【发布时间】:2015-06-24 22:17:55
【问题描述】:

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

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

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

感谢任何帮助。谢谢。

【问题讨论】:

    标签: akka.net


    【解决方案1】:

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

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

    【讨论】:

    • 提到的帖子真的很棒!请务必阅读。谢谢@AndrewS
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 2012-04-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2010-12-15
      • 2017-05-05
      • 1970-01-01
      相关资源
      最近更新 更多