2

我已经使用 Microsoft Azure 设置了 ServiceBus 中继。我使用 HTTP 后端连接到这个,处理传入的 GET 和 POST 请求命中中继。

现在,这工作得很好。不过我的问题是我可以获得的最大并发是 2 个同时请求,即我的后端将只能同时接收 2 个请求,如果有更多请求,它们将被停止,直到之前的请求被处理和完成。我尝试通过服务行为增加并发性,但这似乎被忽略了,但是将并发性降低到 1 似乎正在使用设置。所以我猜这是实际继电器施加的某种限制!?但这真的可以吗?只有2个?在我的场景中,这使得中继无法使用,因为请求必须进行耗时的处理(2 秒),不能延迟并且需要立即响应。因此,我不能简单地存储请求并像队列一样处理它们。

我怎样才能扩大规模?添加更多继电器并连接到所有继电器?

4

1 回答 1

1

您需要设置ServicePointManager.DefaultConnectionLimit一个适当的值以允许更多的并发连接。尽早在您的应用程序代码中尝试这样做:

ServicePointManager.DefaultConnectionLimit = int.MaxValue;

这将允许您的应用程序打开无限(实际上)数量的并发 HTTP 连接。


默认限制是由于 HTTP 协议最初是如何设计的。

以下引用来自HTTP/1.1 RFC 的第 8.1.4 节

单用户客户端不应与任何服务器或代理保持超过 2 个连接 [...] 这些指南旨在改善 HTTP 响应时间并避免拥塞。

因此,兼容的客户端通常必须确保它与单个服务器的打开连接永远不会超过两个。

但是,这已更改,您可以覆盖此行为。以下引用来自RFC 7230 的第 6.4 节,它是 HTTP/1.1 协议的更新:

以前的 HTTP 版本给出了一个特定的连接数作为上限,但发现这对于许多应用程序来说是不切实际的。因此,该规范没有规定特定的最大连接数,而是鼓励客户端在打开多个连接时保持保守。

于 2015-02-26T09:23:20.113 回答