2008-09-07 4 views
6

Używam stosu usług WWW Apache CXF. Gdy klient przekroczy limit czasu serwera, zanim operacja zostanie zakończona, serwer będzie kontynuował operację do momentu jej zakończenia. Chciałbym, aby serwer wykrył, kiedy klient rozłączy się i odpowiednio to obsłuży.Wykrywanie rozłączeń klientów w usługach WWW

Czy istnieje sposób na wykrycie, kiedy klient rozłącza się przy użyciu Apache CXF? A co z używaniem innych stosów serwisów WWW Java?

Odpowiedz

2

Nie jestem zaznajomiony z Apache CXF, ale poniższe zasady powinny mieć zastosowanie do dowolnego środowiska opartego na Servletie Java.

Aby ustalić, czy użytkownik odłączył się (przycisk zatrzymania, zamknięta przeglądarka itp.), Serwer musi wysłać pakiet. Jeśli połączenie TCP/IP zostało zamknięte, zostanie wygenerowany IOException.

Teoretycznie aplikacja Java może wysłać znak spacji w różnych punktach podczas przetwarzania. Numer IOException zasygnalizuje, że klient odszedł, a przetwarzanie może zostać przerwane.

Jednak nie może być kilka problemów z tym technika:

  1. Wysyłanie znaków podczas przetwarzania spowoduje, że odpowiedź jest „zaangażowana”, więc może to być niemożliwe do ustawienia nagłówków HTTP, ciasteczek itp na podstawie wyniku długotrwałego przetwarzania na serwerach.

  2. Jeśli strumień wyjściowy jest buforowany, spacje nie zostaną natychmiast wysłane, a tym samym nieprzeprowadzenie odpowiedniego testu. Jako obejście może być możliwe użycie flush().

  3. Może być trudno zastosować tę technikę dla danej architektury lub widoku technologii (JSP itp.). Na przykład kod renderujący stronę nie będzie w stanie wysłać typu zawartości po zatwierdzeniu odpowiedzi.

Powiązane problemy