2009-04-07 3 views
2

서블릿 컨테이너, 즉 Tomcat에서 수명이 긴 XMPP 연결을 관리하는 방법에 대한 의견을 듣고 싶습니다.서블릿을 통한 XMPP 서버에 대한 로그인 처리

기본적으로 우리는 로그인 자격 증명을 서블릿에 제출하고 각 세션마다 XMPPConnection을 만들고이를 HttpSession에 저장하는 클라이언트가 있습니다.

간단히 말하자면 클라이언트는 로그인, 메시지 송수신, 로그 아웃의 4 가지 작업을 수행 할 수 있습니다.

(1) XMPPConnection의 수명은 클라이언트 에 의해 처리 (제어)되어야합니다. 이 경우 HttpSession에는 시간 초과가 있습니다. HttpSession 의존도가 실수라고 생각하십니까?

(2) 가비지 수집 관점에서 HttpSession이 시간 초과 된 이고 특별히 XMPPConnection.disconnect()를 호출하지 않으면 문제가 발생합니까? 세션 범위에있는 모든 객체는 시간 초과에 도달하면 GC'ed로 처리됩니다. VM이 여전히 연결되어있는 경우 XMPPConnection을 무시하고 무시하겠습니까?

(3) HttpSession 시간 초과 및 무효화의 차이점은 무엇입니까? 내 이해 시간 초과 특정 개체를 참조하는 반면 무효화 모든 것을 제거합니다.

답변

0

(1) 더 좋은 방법이 있지만 세션에 XMPP 자격 증명을 저장하는 데 문제가없는 것은 아닙니다. 나는 최근에 비슷한 것을했고 HttpSession에 의존했다.

(2) 시간 초과 문제를 해결하려면 몇 가지 옵션이 있습니다. 어떤 서블릿이 메시지를 보내거나 받는지 (session.setTimeout())간에 세션 시간 초과를 동적으로 설정하거나 web.xml에서 정적 값으로 설정할 수 있습니다 (값 -1은 시간 초과 없음을 의미). 그런 다음 SessionListener를 만들고 sessionDestroyed에 XMPPConnection.disconnect()를 호출 할 수 있습니다.

+0

감사합니다. HITPSession에서 XMPPConnection이 성공했음을 알았습니다. 대신 SessionAttributeListener를 사용할 것이다. 그것은 같은 목표를 성취해야합니다. –

관련 문제