2008-09-07 4 views
6

웹 서비스 스택 Apache CXF을 사용하고 있습니다. 조작이 완료되기 전에 클라이언트가 시간 초과되거나 서 v와의 연결이 w 어지면 서 v는 조작이 완료 될 때까지 조작을 계속 실행합니다. 클라이언트가 연결을 끊고 그에 따라 처리 할 때 서버가 감지하도록하고 싶습니다.웹 서비스에서 클라이언트 연결 끊기 감지

클라이언트가 Apache CXF를 사용하여 연결을 끊는 경우를 감지하는 방법이 있습니까? 다른 자바 웹 서비스 스택을 사용하는 것은 어떻습니까?

답변

2

나는 아파치 CXF에 익숙하지 않지만, 다음은 모든 자바 서블릿 기반 프레임 워크에 적용되어야한다.

사용자가 연결을 끊었는지 (중지 단추, 닫힌 브라우저 등) 확인하기 위해 서버는 패킷을 보내야합니다. TCP/IP 연결이 닫힌 경우 IOException이 발생합니다.

이론적으로 Java 응용 프로그램은 처리 중에 다양한 지점에서 공백 문자를 보낼 수 있습니다. IOException은 클라이언트가 사라지고 처리가 중단 될 수 있음을 알립니다.

그러나,이 기술에 몇 가지 문제가 될 수 있습니다 처리 중 문자를 보내는

  1. 는 응답이 "헌신"원인이 될 것이다, 그래서 HTTP 헤더, 쿠키 등을 설정하는 것은 불가능 할 수있다 . 장기 실행 서버 측 처리 결과에 따라.

  2. 출력 스트림을 버퍼링하면 공백 문자가 즉시 전송되지 않으므로 적절한 테스트를 수행 할 수 없습니다. 대안으로 flush()을 사용할 수 있습니다.

  3. 주어진 프레임 워크 또는 뷰 기술 (JSP 등)에 대해이 기술을 구현하는 것이 어려울 수 있습니다. 예를 들어, 페이지 렌더링 코드는 응답이 커밋 된 후 콘텐츠 유형을 전송할 수 없습니다.

관련 문제