gpt4 book ai didi

c# - 如何在 ServiceStack 中禁用 Nagle 算法?

转载 作者:可可西里 更新时间:2023-11-01 02:33:05 27 4
gpt4 key购买 nike

我们正在使用 ServiceStack 3.9.71.0,目前我们在 WAN 连接上遇到无法解释的客户端延迟问题。

在 200 毫秒以上后收到负载非常小(<100 字节)的回复。

由于地理距离,链路上的往返时间 (RTT) 约为 40 毫秒。这已通过 ping 另一台主机并使用简单的回显服务来测试 TCP 连接的延迟来验证。

ping 和 echo 测试都显示符合预期的延迟。从我们的 ServiceStack 主机获得回复所需的时间比预期的要长得多。

我们已经验证:

  • WAN 链接仅以 25% 的容量运行(无拥塞)
  • WAN 链路上未采用 QOS
  • 同一主机对来自本地网络上不同主机的同一请求给出快速回复
  • 延迟不是由我们的代码处理请求造成的

我们现在偶然发现了 Nagle 的算法,它可能意味着 WAN 网络上的小请求延迟 (http://blogs.msdn.com/b/windowsazurestorage/archive/2010/06/25/nagle-s-algorithm-is-not-friendly-towards-small-requests.aspx)。

在 .NET 中,可以通过设置 TcpClient.NoDelay = true ( https://msdn.microsoft.com/en-us/en-US/library/system.net.sockets.tcpclient.nodelay(v=vs.110).aspx ) 来禁用它。

如何禁用 ServiceStack 的 TCP 处理?

编辑:我认为这不是 HttpWebRequest is slow with chunked data 的副本.提到的问题涵盖了 ServiceStack 未使用的 HttpWebRequest。 ServiceStack 使用 HttpListener,它也恰好由提到的 ServicePointManager 控制/管理。我们将进行测试,看看设置 ServicePointManager.UseNagleAlgorithm = false 是否可以解决问题。

最佳答案

我认为您在更新 UseNagleAlgorithm = false 中提供的答案应该可以解决这个问题。但要小心,因为 ServicePointManager.UseNagleAlgorithm = false; 是一个全局设置,这意味着它将为您的所有端点和整个请求中的所有请求关闭该算法应用域。当您使用混合大小的 Request 调用多个服务端点(通常是这种情况)时,它会反咬一口。所以你应该考虑只为一个特定的服务点设置它,你可以通过以下方式获取它:

ServicePoint sp = ServicePointManager.FindServicePoint(<uri>);
sp.UseNagleAlgorithm = false;

而不是全局设置

这是一篇关于它的文章:https://technet2.github.io/Wiki/blogs/windowsazurestorage/nagles-algorithm-is-not-friendly-towards-small-requests.html

关于c# - 如何在 ServiceStack 中禁用 Nagle 算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29914318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com