HttpServletRequest가 중단되었는지 확인하는 방법이 있습니까?HttpServlet에서 중단 된 요청 감지
나는 인스턴트 브라우저 응용 프로그램 (일종의 채팅)을 작성하고 있습니다. 클라이언트는 AJAX-HTTP 요청을 사용하여 루프에서 새로운 이벤트를 요청합니다. 서버 (Tomcat)는 HttpServlet에서 요청을 처리합니다. 이 클라이언트에 대한 새 이벤트가 없으면 서버는 새 이벤트가 도착하거나 시간 초과 (30 초)가 발생할 때까지 응답을 지연합니다.
이제 더 이상 폴링하지 않는 클라이언트를 확인하고 싶습니다. 따라서 새 요청이 도착하면 요청이 끝날 때 킥 타이머를 시작합니다. 클라이언트가 브라우저 창을 닫으면 TCP 연결이 닫히고 HTTP 요청이 중단됩니다.
문제점 : 서블릿이 이벤트 요청 또는 대기 또는 이벤트 또는 시간 초과를 처리하기 때문에 클라이언트가 kick-Timeout으로 실행되지 않습니다.
연결 중단 이벤트를 수신 대기 한 다음 대기 요청을 중지하기 위해 알릴 수 있다면 좋을 것입니다. 하지만 HttpServletRequest 나 HttpServletResponse에서 그와 같은 것을 찾을 수 없었습니다 ...
비동기 요청 및/또는 HTTP 푸시를 처리하는 데 사용하는 API/프레임 워크는 무엇입니까? 귀하의 질문 소리/아주 이상한, 표준 Servlet API를 정상적으로 작동하는 방법이 아니기 때문에, 그래서 당신이 그것을 달성하기 위해 (예 : 혜성, 분위기, 서블릿 3.0 비동기, 달성하기 위해 일부 API/프레임 워크를 사용하는 것 같아요) . 그것은 그 중 하나, 또는 당신이 일을 완전히 잘못하고있다. – BalusC
어떤 프레임 워크도 사용하고 있지 않습니다. 그것은이만큼 간단하다 : ::::::: UpdateServlet의 doGet-방법 (1) 세션 (2) updateClient (3) 인쇄 인코딩 된 이벤트에서 목록를 얻을 수에서 updateClient을 가져옵니다. ::::::: UpdateClient의 getEvents-방법 어떤 이벤트가 (2) 이 ::::::: UpdateClient addEvent-방법 (1) 이벤트를 추가하는 이벤트를 반환 기다리고없는 경우 (1) 대기 목록에 (2) 대기 스레드를 알립니다. 요청은 다른 스레드에서 동시에 처리됩니다. –
Escudo
꽤 잘 작동합니다. :-) – Escudo