C#HttpClient高并发时怎么解决TCP连接数过多
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#HttpClient高并发时怎么解决TCP连接数过多相关的知识,希望对你有一定的参考价值。
当做测试的时候发现TCP连接数很高,之前看到dudu的一篇文章中也介绍使用静态唯一实例,不销毁HttpClient对象,重用TCP连接,可是从面相对象的思想来考虑,每次我都会添加不同的httpHeader, 参考技术A 在if语句中加如何解决高并发,连接等待超时的异常
如果你的并发确实超过 20 个,那么加大并发 active 是必须的,除非你接受列长时间的等待(这个是刚需)如果你只是 21 个线程,但不是并发超过20个需求(也就是线程激活,但不一定在处理需求,可能是等待),那么你应该在每个线程的需求处理完成之后及时关闭连接(也就是让连接回到连接池,让其他线程可以用) 参考技术A MaxActive:可用连接实例的最大数目,为负数的时候没有限制。
MaxIdle:空闲连接实例的最大数目,为负值时没有限制。
MaxWait:等待获取链接的超时时间。
也就是说当连接池中没有active/idle的连接时,会等待maxWait时间,如果等待超时还没有可用连接,则抛出Could not get a resource from the pool异常。所以为避免这样的错误,
我们应该根据程序实际情况合理设置这三个参数的值。
同时在我们获取一个连接的程序方法中也应该合理的处理这个异常,当没有连接可用时,等待一段时间再获取也许是个比较好的选择。
以上是关于C#HttpClient高并发时怎么解决TCP连接数过多的主要内容,如果未能解决你的问题,请参考以下文章
Linux下解决高并发socket最大连接数限制,tcp默认1024个连接