我有一个关于增加最大帧大小和问题的问题。发送/接收缓冲区大小值。他们有多高可以限制吗?
我将大量数据传递到系统中(比如说20mb),然后用它来计算一些结果并返回。将上述参数设置为100mb会导致消息被丢弃。在此之前我能够通过的最大块大约是5mb。我试图增加连接和确认的超时但它似乎没有什么区别。
此外,如果邮件被删除,有没有办法得到通知?有时它发送一个Dissassociated错误,有时它只是无所事事。 log-frame-size-exceeded = on和log-buffer-size-exceeded = 50000设置似乎没有效果。
感谢任何帮助。谢谢。
答案 0 :(得分:2)
一般来说,一次性通过线路推送大部分数据是一个坏主意。将它们分成更小的部分并逐个发送会更好(如果有必要,这也会使重试策略更便宜)。如果你想让你的演员逻辑不知道传输细节,你可以通过定义一对专门的演员来抽象它,他们唯一的工作就是拆分/加入大消息。
另外,Aaron-- Helios的创建者(Akka.NET使用的套接字服务器) - 提到你不应该使用大消息,因为它们会延长服务器的缓冲池大小,但是一旦它被拉伸,它就会不会再被减少。
答案 1 :(得分:2)
您应该将消息剪切成更小的部分,并在接收端重新构建对象。它会使你的重试更容易,而且也不会“占用”套接字(例如,如果你通过套接字发送100mb,你就会把它绑起来让心跳无法从远程系统中通过)。
我写了一篇in-depth post关于你可能觉得有用的Akka.NET中的大型消息和套接字的内容。但简短的回答是将您的消息分成小块并在接收端重建它,或者更好的是,以流式方式处理它们。