Lind.DDD.Utils.HttpHelper关于对HttpClient的正确使用

时间:2023-03-09 00:58:09
Lind.DDD.Utils.HttpHelper关于对HttpClient的正确使用

回到目录

官方的不一定是对的,机器最能证明一切

不知道从什么时候起,我们在写数据库连接,网络连接,文件操作时会习惯加上using,这种习惯被我们误称为一种模式,但事实上,一切事情都有因有果的,使用using的作用是什么?我想这个问题大家都知道应该,它可以释放资源,而对于数据库连接来说,它不是释放数据连接,而只是把连接放里“连接池”,等待下次使用时,直接用池子里取出来即可,好处当然就是省去了很多“建立连接”时的开销,而不对网络连接来说,则不是那么简单了,不能一同而义,这点对于MSDN也有错误的说法和写法,最近在看博文时(老外的,Infoq上翻译的)给出了有利的证据,具体看下文。

using的写法其实就是对IDispose模块的实现 

  using (var http = new HttpClient(handler))
{
http.Timeout = new TimeSpan(, , timeOut);
HttpResponseMessage response;
response = http.GetAsync(GeneratorUri(requestUri, ApiValidateHelper.GenerateCipherText(nv))).Result;
return response;
}

对于上面的代码,也是MSDN推荐的写法,即在使用完网络资源后,自动释放它,而对于下一次网络资源的访问,还需要从新去构建,事实上,从资源的销毁到下次资源的建立需要很大的代价,而且你的网络连接的构建(套接字)是有限制的,并不是无穷无近的,所以,我们必须要进行控制。

相关中文文章:http://www.infoq.com/cn/news/2016/09/HttpClient

相关英文文章:http://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

下面是大叔对using方式进行的测试,可以通过截图看到,我们的TCP连接有很多,这样当高并发情况下,你的套接字连接将会被用斤。

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAFoCAIAAADGplY/AAAgAElEQVR4nO2b17s2W1Xl67rVbhVD29otBhAlHDCASlSCSlKSCigSVdI5ZAnnEJWkApJVwIRtaltbxNCtUm1qAz5PX/Qf1Bf7O++ut9acY40516r1Vu1n/J66WLVq1Zhjhvr2zftN/+4bXwKuL7jXS77gXi89XV9476vrZV9475d94Te97ItuXS//om96+Rfd5+X//nR98+3/YXl9yx1ffLrue8cX3/eOL7nvK25d93vFl9zvFV96v1d86f1e+aX3v3Xd4/6vvMf9X3WPB7zqHg941ZddXbe96stue/WX3fbqL7+6HvjqL3/ga778ga/5ige+5isedLpe+5UPeu1Xfuvpet1//Lbr66u+7XVf9e0/c7r+03dcXa+/ur76wVfXG776wW/46oe84Wuurzd+zXe+8T+fru96039ZXt/9pq/97jtvXQ+982sfeuc9H3rnPR961z0fetc9H3bXPR9219c97K6ve9ibv+7ht66vv7oe8Zavf8RbvuHqeuRbvuGRb/2GR771G6+uR11db7vXo952r+85XW+/9/e8/d7fe31906Pfcbru8+h33Ocx77jPY3726vrmx15dP3d1fcvjTtc7v+X73nnf6+td9/3+d93vdP3Au+7/A+++vh7/7gc8/t0PePx7HvD49zzgCe95wBPec9sT3nPbE9572xPee9sT33vbE9/7wKvrST9/dT3o6nryLzzoyb/wrVfXD15dv/htV9cPXV3v+/Yfet+3P+X6+o6nvP87nnrrevBT3//gp73/wU/7wNX1kKd94CFP/8BDnv5LV9d3PuN0ffA7n/HB7/rh0/Wh7/qRD3334nroj374+nrmhx/2zA8/7JkfuXU96yMPf9ZHHv6sjz78WR99+LM/+vBnf/QRt66PPeLHPvaIH/vYI6+uH//4I3/84486Xc/5+KOe88vfc3X9xNX1K997dT331vXo5/7qo593fT3meb/6mOd/4up67PM/8dgXfOKxL/jk1fW4F3zycS+8uj71uBd+6vtedLp+7fte9Gvf/5OL66d+/QcW1+N/+tcf/9O/cet68W884cW/8YQX/+at6yW/+cRb12898aW/9cSX/taTbl2fftLLPv2kl336yVfXyz/95Jf/9g+ertt/+wdv/68/dHXdcet6yh2/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" alt="" />

可用套接字耗尽后可能出现这样的异常:System.Net.Sockets.SocketException!

改进后的程序(单例或者静态化的HttpClient)

   readonly static HttpClient http = new HttpClient(new HttpClientHandler()
{
AutomaticDecompression = System.Net.DecompressionMethods.GZip
});
[TestMethod]
public void Get()
{
Stopwatch sw = new Stopwatch();
sw.Restart();
for (int i = ; i < ; i++)
{
var response = http.GetAsync("http://www.sina.com").Result;
}
sw.Stop();
Console.WriteLine("1000个请求的时间" + sw.ElapsedMilliseconds);
}

修改之后,我们可以看到整个HttpClient的测试性能有了明显的提升!

aaarticlea/png;base64,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" alt="" />

对于控制台输出的TCP连接情况,我们也只看到一条相关的数据,这也是我们希望看到的!

netstat -nbp | findstr 202.108.33.107

结果

aaarticlea/png;base64,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" alt="" />

最后,感谢Infoq的编辑“谢丽”找了这么好的一篇文章,辛苦了!

回到目录