8
我正在寫一個簡單的HTTP服務器並瞭解TIME_WAIT。在處理請求後,沉重環境中的真實Web服務器如何處理來自數千用戶的請求,而不會在TIME_WAIT中卡住所有套接字? (不要詢問保持活力 - 這對單個客戶有幫助,但對成千上萬的不同客戶來說是如此)。Web服務器如何避免TIME_WAIT?
我讀過,你試着讓客戶端先關閉,這樣所有的TIME_WAITs都會分散到所有的客戶端中,而不是集中在服務器上。
這是如何完成的?在某些時候,服務器必須調用close/closesocket。
那麼服務器只是在等待客戶端關閉?我想在某種程度上它會想超時並關閉連接本身。 – DougN 2010-09-17 21:26:46
這讓我想到另一個問題:)你是否認爲一個真正的Web服務器(IIS/Apache?)只需在第5秒(?)秒的超時時間內調用套接字選擇 - 計算出應該足夠的時間讓客戶端斷開(並讓選擇返回一個錯誤套接字)? – DougN 2010-09-17 21:33:17
如果您重置連接而不是關閉連接,那麼您也不會以TIME_WAIT結束。所以如果你想爲閒置連接增加一個超時時間,你可以先關閉他們,然後再發出關閉。這會發送一個RST,你不會在TIME_WAIT結束。 – 2010-09-18 06:53:42