2010-09-17 70 views
8

我正在写一个简单的HTTP服务器并了解TIME_WAIT。在处理请求后,沉重环境中的真实Web服务器如何处理来自数千用户的请求,而不会在TIME_WAIT中卡住所有套接字? (不要询问保持活力 - 这对单个客户有帮助,但对成千上万的不同客户来说是如此)。Web服务器如何避免TIME_WAIT?

我读过,你试着让客户端先关闭,这样所有的TIME_WAITs都会分散到所有的客户端中,而不是集中在服务器上。

这是如何完成的?在某些时候,服务器必须调用close/closesocket。

回答

9

启动主动关闭的对等体是进入TIME_WAIT的对等体。所以只要客户端关闭连接,客户端就会获得TIME_WAIT而不是服务器。我进一步详细了解一下in this blog posting

+0

那么服务器只是在等待客户端关闭?我想在某种程度上它会想超时并关闭连接本身。 – DougN 2010-09-17 21:26:46

+0

这让我想到另一个问题:)你是否认为一个真正的Web服务器(IIS/Apache?)只需在第5秒(?)秒的超时时间内调用套接字选择 - 计算出应该足够的时间让客户端断开(并让选择返回一个错误套接字)? – DougN 2010-09-17 21:33:17

+3

如果您重置连接而不是关闭连接,那么您也不会以TIME_WAIT结束。所以如果你想为闲置连接增加一个超时时间,你可以先关闭他们,然后再发出关闭。这会发送一个RST,你不会在TIME_WAIT结束。 – 2010-09-18 06:53:42

相关问题