2009-09-12 14 views
22

Bir sunucu uygulamasına (veya tüm servletlerim) gelen tüm istekler için bir istek zaman aşımını nerede yapılandırabileceğimi anlamaya çalışıyorum. Düşündüğüm gibi, bir konteyner mülkü mü? Ayrıca, bu nasıl farklı tarayıcıları etkiler? Hepsi kapsayıcının dikte ettiği parametreye uyuyor mu? Ya da zaman aşımı süresi isteği kontrol edebileceğim bir şey değil ve her bir tarayıcı kendi başına buna karar veriyor? (Sadece oturum zaman aşımı hakkında konuşmuyorum)Java servlet konteynırında Http Request zaman aşımı parametresi nasıl belirtilir

+1

Güzel soru. Son cevaba yorumunuzu okudum ve isteğin kapalı olmadığından emin olmak için hangi yaklaşımı seçtiniz diye merak ettim. Ben Comet'i kendim yapmaya çalışıyorum ve bunu nasıl doğru yapacağımı bilmiyorum. Bir çözüm önerebilir misiniz? Teşekkürler! – Dragos

+0

@Dragos Sadece 29 saniye sonra (30 saniyeden az [IE sınırı]) kullanıcıya isteği geri döndüren basit bir Uzun yoklama mekanizmasının uygulanmasına son verdik. Şimdi aynı sorunla karşı karşıya olsaydım, websockets api'yi kullanmayı denemekti. – Ittai

+0

Yani burada bir zaman aşımı için "zaman x" geçerli yanıtı temizler ve geçerli iş parçacığı öldürür, böylece tarayıcı yeterince hızlı veri almak öyle mi? FWIW tarayıcıları bu günlerde bir cevapta "çok dakika" beklemekte gibi görünüyor ... – rogerdpack

cevap

14

İstemcideki zaman aşımı (yani, bir HTTP isteğine yanıt için ne kadar bekleyeceği) istemcide belirlenir. IE için bkz. this ve Firefox için bkz this.

Bu zaman aşımını sunucudan denetleyemezsiniz.

+0

Her şeyden önce cevap için teşekkürler, bu program tarafından istemci tarafında (JavaScript ile) değiştirilemez değil mi? – Ittai

+0

Ben inanmıyorum, hayır. –

2

İstemci zaman aşımını sunucudan denetleyemezsiniz. Ancak, her zaman müşteriye verileri geri gönderebilir ve uzun çalışma süreniz meşgul olur. Bu, istemcinin zaman aşımını önleyecektir ve kullanıcıya ilerlemeyi göstermek için kullanılabilir. Verileri yanıttan elde edilen OutputStream veya Writer'a yazın ve istemciye kısmi veri göndermek için floş çağırın. İstemci zaman aşımı kontrol edemez rağmen

+0

xmlHttpRequest kullanılıyorsa bu kısmi veriler nasıl elde edilebilir? IE'den okudum, istek bitene kadar verilere erişemiyorsunuz – Ittai

+1

Evet, ancak istemci bazı veriler geldiği sürece zaman aşımına uğramamalı. –

+0

Haklısın ama biraz daha karmaşık çünkü Ben Comet'i uyguluyorum, bu yüzden 'Long Polling'i kullanacağım ve bu yüzden istekleri kaydetmek için daha uzun bir zaman aşımı gerekecek ya da David'in önerdiği şey olan Streaming'i kullanmam gerekecek. Neyse, teşekkürler. – Ittai

5

, sen

<Connector port="8080" 
    ... 
    connectionTimeout ="5000" 
    disableUploadTimeout="false" /> 

Bu sunucu sadece 5 saniye bekleyin yapar, kendi bağlayıcı yapabilirsiniz, Tomcat, Örneğin :) sunucunun çok sabırsız yapabilir ve bağlantıyı kapatın. Tarayıcı bir bağlantı kapalı hatası alacaktır. Bunu istemcideki zaman aşımıyla aynı şekilde yapabilirsiniz.

Elbette, bu yalnızca zaman aşımı sunucudan kaynaklanıyorsa, tarayıcı ve sunucu arasında bağlantı sorunları değilse işe yarar.

+0

"zaman aşımı" Tomcat Bağlayıcısı – robsf

+2

içinde böyle bir parametre yoktur. Parametre adı Bağlayıcı etiketinin içindeki connectTimeout şudur:

İlgili konular