2010-09-17 12 views
8

Basit bir HTTP sunucusu yazıp TIME_WAIT hakkında bilgi veriyorum. Ağır ortamlardaki gerçek web sunucuları, bir istek yapıldıktan sonra TIME_WAIT'e takılan tüm soketler olmadan binlerce kullanıcıdan gelen istekleri nasıl ele alır? (Hayatta kalmayi istemiyorum - bu tek bir müsteriye yardimci olacaktir, ama binlerce farkli müsteriye karsi gelmez).Web sunucuları TIME_WAIT'i nasıl önler?

İstemciyi önce kapatmayı denediğinizi okudum, böylece tüm TIME_WAIT'leri sunucuda yoğunlaşmak yerine tüm istemciler arasında yayılacak.

Bu nasıl yapılır? Bir noktada sunucunun yakın/kapanış çağırması gerekiyor.

cevap

9

Etkin kapatmayı başlatan eş, TIME_WAIT işlevine giden yoldur. İstemci bağlantıyı kapattığı sürece istemci, sunucudan değil, TIME_WAIT alır. Bunlara biraz daha ayrıntılı olarak in this blog posting giriyorum.

+0

Sunucu sadece takılıyor ve müşterinin kapanmasını bekliyor mu? Bir noktada bunun zaman aşımına uğramasını ve bağlantının kendisini kapatacağını düşünürdüm. – DougN

+0

Beni başka bir soru hakkında düşünmemi sağlıyor :) Gerçek bir web sunucusunun (IIS/Apache?) Sadece 5 (?) Saniye zaman aşımı ile soket üzerinde arama yapması gerektiğini düşünürsünüz. bağlantıyı kes (ve bir hata soketi ile geri dönmeyi seçelim)? – DougN

+3

Bağlantıyı kapatmayı değil, sıfırlarsanız, TIME_WAIT içinde de bitmezsiniz. Bu nedenle boşta kalan bağlantılar için bir zaman aşımı eklemek isterseniz, önce oyalamayı kapatıp kapatmayı kapatarak bunları kapatabilirsiniz. Bu bir RST gönderecek ve TIME_WAIT içinde bitmeyeceksin. –

İlgili konular