2009-09-12 30 views
22

Tôi đang cố gắng hiểu nơi tôi có thể cấu hình thời gian chờ yêu cầu cho tất cả yêu cầu đến servlet của tôi (hoặc tất cả servlet của tôi)? Có phải đó, như tôi nghĩ, một tài sản container? Ngoài ra, điều này ảnh hưởng như thế nào đến các trình duyệt khác nhau? Tất cả chúng có tuân thủ thông số mà container chứa không? Hoặc có thể thời gian chờ yêu cầu thậm chí không phải là điều tôi có thể kiểm soát và mỗi trình duyệt tự quyết định điều này? (Chỉ cần rõ ràng là tôi không nói về thời gian chờ của phiên)Làm thế nào để xác định tham số thời gian yêu cầu Http trên thùng chứa servlet Java

+1

Câu hỏi hay. Tôi đã đọc nhận xét của bạn cho câu trả lời cuối cùng và tôi đã tự hỏi bạn đã chọn cách tiếp cận nào để đảm bảo yêu cầu không bị đóng. Tôi đang cố gắng để làm cho Comet bản thân mình và không biết làm thế nào để làm cho quyền này. Bạn có thể đề nghị một giải pháp? Cảm ơn! – Dragos

+0

@Dragos Tôi đã kết thúc usjust triển khai một cơ chế bỏ phiếu dài đơn giản trả lại yêu cầu cho người dùng sau ~ 29 giây (ít hơn 30 giây [giới hạn IE]). Những gì tôi sẽ làm bây giờ nếu tôi đã phải đối mặt với cùng một vấn đề là cố gắng sử dụng api websockets. – Ittai

+0

Vì vậy, bạn đang tìm kiếm ở đây cho một thời gian chờ như vậy mà "tại thời điểm x" nó tuôn ra phản ứng hiện tại và giết chết các chủ đề hiện tại, để trình duyệt nhận được dữ liệu đủ nhanh? Trình duyệt FWIW những ngày này dường như chờ "nhiều phút" trên một phản hồi ... – rogerdpack

Trả lời

14

Thời gian chờ từ máy khách (nghĩa là khoảng thời gian chờ phản hồi yêu cầu HTTP) được xác định tại máy khách. Đối với IE, xem this và đối với Firefox, hãy xem this.

Bạn không thể kiểm soát thời gian chờ này từ máy chủ.

+0

Trước hết cảm ơn bạn đã trả lời, điều này không thể thay đổi theo chương trình ở phía máy khách (qua JavaScript) phải không? – Ittai

+0

Tôi không tin như vậy, không. –

2

Bạn không thể kiểm soát thời gian chờ của máy khách từ máy chủ. Tuy nhiên, bạn có thể gửi dữ liệu trở lại cho khách hàng mọi lúc và sau đó trong khi hoạt động chạy dài của bạn đang bận. Điều này sẽ ngăn không cho khách hàng định thời gian và có thể được sử dụng để hiển thị tiến trình cho người dùng vv. Ghi dữ liệu vào OutputStream hoặc Writer thu được từ phản hồi và gọi flush để gửi một phần dữ liệu tới máy khách.

+0

làm cách nào để thu thập dữ liệu một phần này nếu sử dụng xmlHttpRequest? Tôi đã đọc hơn trong IE, bạn không thể truy cập dữ liệu cho đến khi yêu cầu hoàn tất – Ittai

+1

Có, nhưng khách hàng không nên hết thời gian miễn là một số dữ liệu đang đến. –

+0

Bạn nói đúng nhưng phức tạp hơn một chút vì Tôi đang thực hiện Comet vì vậy tôi sẽ hoặc sử dụng 'Long Polling' và do đó sẽ cần một thời gian chờ lâu hơn để lưu yêu cầu hoặc sử dụng Streaming đó là những gì tôi mặc dù David đã đề xuất. Dù sao thì cũng cám ơn bạn. – Ittai

5

Mặc dù bạn không thể kiểm soát thời gian chờ khách hàng, bạn có thể làm cho máy chủ rất thiếu kiên nhẫn :) Ví dụ, trên Tomcat, bạn có thể làm điều này trong kết nối của bạn,

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

Điều này làm cho máy chủ chỉ chờ 5 giây và đóng kết nối. Trình duyệt sẽ nhận được lỗi kết nối bị đóng. Bạn có thể xử lý nó giống như thời gian chờ trong ứng dụng khách.

Tất nhiên, điều này chỉ hoạt động nếu hết thời gian chờ do máy chủ gây ra, chứ không phải vấn đề kết nối giữa trình duyệt và máy chủ.

+0

"hết giờ" không có tham số nào trong Đầu nối Tomcat – robsf

+2

Tên tham số là connectionTimeout bên trong thẻ Trình kết nối, như sau:

Các vấn đề liên quan