在 system.net 中增加“maxconnection”设置有什么缺点吗?

Phi*_*ler 5 c# asp.net throttling http

我们的系统存在 WCF 连接受限的问题,此答案已解决。我们将此设置添加到客户端的 web.config 中,并且两个并发连接的限制消失了:

除了明显的影响(例如服务器超载)之外,将此限制设置为比默认“2”高的数字(可能很多)是否有任何不利之处?任何关于默认值如此低的原因的来源?

Jus*_*ant 5

一般来说,提高客户端连接限制是可以的,但有一些注意事项:

  • 如果您不拥有服务器,则要小心,因为您的客户端应用程序可能会与 DoS 攻击混淆,这可能会导致您的客户端 IP 地址被服务器阻止。即使您拥有服务器,这有时也是一种风险——例如,我们遇到过这样的情况:当用户按住 Enter 键时,我们应用程序登录页面中的错误导致发出多个请求。由于我们防火墙的 DoS 保护,这导致这些用户被我们的应用程序阻止!
  • 连接不是免费的。它们占用 RAM、CPU 和其他稀缺资源。拥有 5 或 10 个客户端连接不是问题,但是当您有数百个打开的客户端连接时,您就有可能耗尽客户端上的资源。
  • 客户端和服务器之间的代理或边缘服务器可能会施加自己的限制。因此,您可能会尝试同时打开 1,000 个连接,但结果却是 #5,然后被代理拒绝。
  • 有时,添加更多客户端连接是解决架构问题的一种方法。相反,请考虑修复架构问题。例如,如果您打开如此多的连接,因为每个请求需要 10 分钟才能返回结果,那么您确实应该考虑更松散耦合的解决方案(例如,将请求发布到服务器队列,稍后再回来获取结果)因为长期连接容易受到网络中断、客户端或服务器暂时中断等的影响。
  • 能够同时打开多个连接可能会使重新启动客户端或服务器应用程序存在风险,因为即使您的“正常”负载仅为 X 个请求/秒,如果客户端或服务器已离线一段时间,则客户端可能会尝试通过一次发出数百或数千个请求来赶上待处理的请求。许多服务器对过载情况具有非线性响应,其中额外 10% 的负载可能会将响应时间减少 100%,从而造成失控的过载情况。

解决所有这些风险的方法是使用您想要支持的最大连接数仔细地对客户端和服务器进行负载测试……并且不要将连接限制设置为高于您测试过的限制。不要仅仅因为可以,就将连接限制提高到 1,000,000!

为了回答您问题的另一部分,2 个连接的默认限制可以追溯到 HTTP 规范的一个非常旧的版本,该规范将客户端限制为每个域 2 个连接,这样 Web 浏览器就不会淹没服务器同时连接很多. 有关更多详细信息,请参阅此答案:https : //stackoverflow.com/a/39520881/126352