我正在尝试同时打开大约 25 个与主机的连接。
我的操作系统是视窗 10。
为了进行测试,我在本地IIS
上调出一个简单的网站,并使用Thread.Sleep(2000)
以 2 秒的延迟向用户响应一个简单的数据。
现在在客户端上使用以下代码:
const int len = 25;
for (int i = 0; i < len; i++)
{
new Thread(new ParameterizedThreadStart((idx) =>
{
// start downloading data.
var res = new WebClient().DownloadString("http://192.168.1.101:8090/");
// log index and time when done.
Console.WriteLine($"{Convert.ToInt32(idx).ToString("00")} done at:{ DateTime.Now.ToString("HH:mm:ss:ffff") }");
})).Start(i);
}
我得到了以下结果:
Thread 01 done at 40:8476 ms
Thread 00 done at 40:8476 ms
Thread 03 done at 40:8496 ms
Thread 04 done at 40:8496 ms
Thread 02 done at 40:8506 ms
Thread 05 done at 40:8506 ms
Thread 07 done at 40:8516 ms
Thread 06 done at 40:8516 ms
Thread 08 done at 40:8536 ms
Thread 09 done at 40:8545 ms
Thread 11 done at 42:8510 ms
Thread 10 done at 42:8510 ms
Thread 12 done at 42:8560 ms
Thread 14 done at 42:8560 ms
Thread 15 done at 42:8570 ms
Thread 13 done at 42:8580 ms
Thread 16 done at 42:8590 ms
Thread 17 done at 42:8590 ms
Thread 18 done at 42:8610 ms
Thread 19 done at 42:8610 ms
Thread 21 done at 44:8565 ms
Thread 20 done at 44:8565 ms
Thread 23 done at 44:8634 ms
Thread 24 done at 44:8654 ms
Thread 22 done at 44:8654 ms
上面的结果告诉我们:
1-Thread 0 to 9
同时获得了数据。第二个 40(
2-Thread 10 to 19
在上一步后 2 秒后同时获取数据。第二个 42(
3-Thread 20 to 24
同时获取数据。 上一步后 2 秒后。第二44(
现在我的问题是世卫组织限制了我,为什么它只能同时打开 10 个HTTP
连接,我怎样才能将其设置为无限制。
如果有任何其他平台或编程语言,我们将受到欢迎。
谁?您的操作系统和 Web 服务器制造商,正在Microsoft。
为什么?因为 Windows 10 是一个客户端操作系统,Microsoft不希望您在此托管任何严肃的 Web 应用程序。
例如,请参阅:
- 为什么 IIS 一次只允许 3 个连接?
- Windows 7 IIS v7.5 是否有任何连接限制?
- Windows 7 中 IIS 上的最大 http 请求数
从 使用 信号器时,IIS 上是否有任何连接限制,链接到 SignalR 文档:
当 SignalR 托管在 IIS 中时,支持以下版本。请注意,如果使用客户端操作系统,例如用于开发(Windows 8 或 Windows 7(,则不应使用完整版本的 IIS 或 Cassini,因为将施加 10 个同时连接的限制,由于连接是暂时的,经常重新建立,并且在不再使用时不会立即处理,因此将很快达到。IIS Express 应该在客户端操作系统上使用。
还有其他帖子,例如Windows 10连接限制是否适用于自托管应用程序?,提到了20个连接,但这是20个设备(可能由远程IP地址识别(连接到选定的Windows服务(SMB,IIS,...(。
IIS限制是10,并且已经很多年了,我想从Windows 7开始。
所以这个问题的答案的前半部分是:
- 如果在 Windows 10 上进行开发时需要 10 个以上的同时传入HTTP 连接,请使用 IIS Express 或 IIS 或 Cassini 以外的任何其他 Web 服务器。
但这个答案还有后半部分。如果您需要超过 10 个(或 2 个或 ...,具体取决于环境(同时传出HTTP 连接,则 ServicePointManager 可以管理此连接。看:
- 尝试并行运行多个 HTTP 请求,但受到 Windows(注册表(的限制
- 如何以编程方式删除 WebClient 中的 2 个连接限制
- Microsoft 文档:.NET 框架中的网络编程 - 管理连接
因此,在执行请求之前更改限制:
System.Net.ServicePointManager.DefaultConnectionLimit = 25;