Bag*_*ani 1 c# multithreading http iis-10
我试图同时打开大约 25 个与主机的连接。
我的操作系统是 windows 10。
为了进行测试,我在本地打开了一个简单的网站,IIS并使用Thread.Sleep(2000).
现在在客户端上使用此代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
我得到了以下结果:
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
Run Code Online (Sandbox Code Playgroud)
上面的结果告诉我们:
1- 同时Thread 0 to 9获取数据。(秒 40)
2-Thread 10 to 19上一步后 2 秒后同时获取数据。(秒 42)
3- 同时Thread 20 to 24获取数据. 上一步后 2 秒后。(第 44 秒)
现在我的问题是WHO限制了我,为什么它只能同时打开 10 个HTTP连接,以及如何将其设置为无限制。
如果有任何其他平台或编程语言,将受到欢迎。
WHO?您的操作系统和 Web 服务器制造商,即 Microsoft。
为什么?因为 Windows 10 是客户端操作系统,Microsoft 不希望您在其上托管任何严肃的 Web 应用程序。
见例如:
并且从使用 signalr 时,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 开始。
所以这个问题的前半部分答案是:
但是这个答案还有后半部分。如果您需要 10 个以上(或 2 个,或...,取决于环境)同时传出的HTTP 连接,则有 ServicePointManager 来管理它。看:
因此,在执行请求之前更改限制:
System.Net.ServicePointManager.DefaultConnectionLimit = 25;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |