我遇到了HttpWebRequest的问题。我试图同时向同一台服务器发送多个请求。 当我检查响应的时间时,我发现它们没有花费相同的时间,而是随着每个请求而增加。
到目前为止我的代码:
public static void Main()
{
ServicePointManager.Expect100Continue = false;
ServicePointManager.UseNagleAlgorithm = false;
ServicePointManager.DefaultConnectionLimit = 1000;
while(true)
{
List<Task> tasks = new List<Task>();
for (int currency = 1; currency <= 4; currency++)
{
tasks.Add(Task.Factory.StartNew(async () =>
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("theurl"));
request.Method = "GET";
request.Host = "thehost";
request.UserAgent = "Mozilla";
request.Accept = "*/*";
request.Headers.Add("Content-Encoding", "gzip");
request.AutomaticDecompression = DecompressionMethods.GZip;
request.KeepAlive = false;
request.Proxy = null;
long t1 = DateTime.Now.Ticks;
var response = await request.GetResponseAsync();
Stream receiveStream = response.GetResponseStream();
BufferedStream buffer = new BufferedStream(receiveStream);
StreamReader reader = new StreamReader(buffer, Encoding.UTF8);
var result = reader.ReadToEnd();
long t2 = DateTime.Now.Ticks;
var whatweneed = JSON.Parse(result).At("whatweneed");
Console.Write(whatweneed + " : ");
Console.WriteLine((t2 - t1) / 10000.0);
}));
}
Thread.Sleep(1000);
Task.WaitAll(tasks.ToArray());
Console.WriteLine();
}
Console.ReadKey();
}
结果如下:
whatweneed : 70.000
whatweneed : 76.334
whatweneed : 84.453
whatweneed : 90.873
whatweneed : 73.840
whatweneed : 78.294
whatweneed : 85.953
whatweneed : 92.945
whatweneed : 67.034
whatweneed : 72.452
whatweneed : 79.934
whatweneed : 88.881
怎么可能???这种行为背后的概念是什么?
更新代码
public static void Main()
{
ServicePointManager.Expect100Continue = false;
ServicePointManager.UseNagleAlgorithm = false;
ServicePointManager.DefaultConnectionLimit = 1000;
while(true)
{
List<Task> tasks = new List<Task>();
for (int value = 1; value <= 4; value++)
{
tasks.Add(Task.Factory.StartNew(() =>
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("theurl"));
request.Method = "GET";
request.Host = "thehost";
request.UserAgent = "Mozilla";
request.Accept = "*/*";
request.Headers.Add("Content-Encoding", "gzip");
request.AutomaticDecompression = DecompressionMethods.GZip;
request.KeepAlive = false;
request.Proxy = null;
using (Stream receiveStream = request.GetResponse().GetResponseStream())
{
long t1 = DateTime.Now.Ticks;
using(BufferedStream buffer = new BufferedStream(receiveStream))
{
using (StreamReader reader = new StreamReader(buffer, Encoding.UTF8))
{
var result = reader.ReadToEnd();
long t2 = DateTime.Now.Ticks;
var whatweneed = JSON.Parse(result).At("whatweneed");
Console.Write(listing + " : ");
Console.WriteLine((t2 - t1) / 10000.0);
}
}
}
}));
}
Thread.Sleep(250);
Task.WaitAll(tasks.ToArray());
Console.WriteLine();
}
Console.ReadKey();
}
结果:仍然相同:(
更新,i = 10
whatweneed : 100,5859
whatweneed : 103,5156
whatweneed : 106,4453
whatweneed : 109,375
whatweneed : 112,3047
whatweneed : 116,2109
whatweneed : 119,1406
whatweneed : 121,0938
whatweneed : 101,5625
whatweneed : 101,5625
whatweneed : 107,4219
whatweneed : 111,3281
whatweneed : 113,2813
whatweneed : 117,1875
whatweneed : 120,1172
whatweneed : 123,0469
whatweneed : 126,9531
whatweneed : 128,9063
whatweneed : 92,7735
whatweneed : 92,7734
看起来有点奇怪,时间提升然后第9或第10次看起来再次“正常”? 但在主要实现中,我只会同时发送4个请求,然后使用它们,并在2-3秒之后再次执行。