如何完全终止HttpWebRequest

时间:2017-03-20 15:05:07

标签: c# tcp httpwebrequest network-protocols webproxy

即使我在检查现有HTTP连接时正确终止了所有内容,但我发现它们没有被终止

例如,当我通过启动不同的任务打开200个并发连接时

我看到了

value='USD'

更糟糕的是,TimeWait的数量每分钟都在增加

那么我怎样才能防止这种问题发生?

一段时间后,Windows无法发出任何新请求

使用webproxies时出现此问题:Too many proxy connection kills window's resolving hosts ability

这时我使用200个不同代理的连接

enter image description here

1 个答案:

答案 0 :(得分:1)

TimeWait状态下的连接可能会产生性能问题。

首先,看看TCP状态图,

https://en.wikipedia.org/wiki/File:Tcp_state_diagram_fixed_new.svg

这是机器的TCP发送ACK段以响应从其对等方接收到的FIN段之后的TCP连接状态(详见RFC 793定义TCP回溯到1981 http://www.ietf.org/rfc/rfc793.txt)。在此状态期间,套接字资源(包括TCB(TCP控制块)和端口)当然不会释放到OS。超时到期后,套接字资源将释放到操作系统。最初的原因是处理不可靠媒介中同伴之间可能发生的两个将军问题。连接将在TimeWait中,直到可配置的超时,其具有取决于操作系统的默认值。

这些链接可以帮助您在Windows中设置TcpTimedWaitDelay参数:

https://technet.microsoft.com/en-us/library/cc938217.aspx http://msdn.microsoft.com/en-us/library/ee377084%28v=bts.10%29.aspx

它说默认值是240秒,但我是我的测试我经历了较低的时间(60到120之间)。

无论如何,今天的网络更可靠,需要高性能和吞吐量的Web服务应该会降低这个价值。我建议将它设置为5秒钟。如果你想更加保守,可以将它设置为30秒。

对您有用的其他参数是Windows允许客户端打开的临时端口的最大数量。 Windows Server默认限制临时TCP端口的最大数量。在某些Windows中,此值可能为5000.您可以通过在注册表中设置值MaxUserPort来更改此行为。