2017-01-18 7 views
0

동일한 응용 프로그램 내에서 때로는 websocket 세션 (dis) 연결을 추적해야하는 경우가 있습니다. 연결시 SessionConnectedEvent S를 추적하기 위해Spring Websocket support/Stomp를 사용한 세션 연결 해제 (dis)

는, I는 다음 예와 같이, 몇몇 헤더를 건네

서버 측
stompClient.connect({ 
    companyId:1, 
    messageType: 'BUSINESS_CASE_1' // all message sents using this session will be typed 
}, frame => { 
    stompClient.subscribe('/topic/foo', response => {}); 
}); 

는 이러한 이벤트가 쉽게 수신기 및 StompHeaderAccessor를 사용하여 차단된다

public class SessionConnectedEventListener implements ApplicationListener<SessionConnectedEvent> { 

    @Override 
    public void onApplicationEvent(SessionConnectedEvent event) { 

     StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage());   
     String messageType = StompUtils.getHeaderValue("messageType", sha); 
     // handle business cases depending on the message type 
    } 
} 

해커처럼 보이지만 작동합니다.

연결이 끊어지면 (SessionDisconnectEvent) StompHeaderAccessor 내에서 sessionId 이외의 문자는 볼 수 없습니다. 원래 세션/클라이언트 정보에 대한 단일 참조가 아닙니다. :-(

1) 연결시 헤더를 사용하는 것보다 세션 연결 이벤트를 구별하는 더 좋고/더 좋은 방법이 있습니까?

2) 세션 연결 해제 중에 비즈니스 데이터를 전달할 수있는 방법이 있습니까? 그래서 내가 내 애플 리케이션에서 연결이 끊어진 위치에 따라 다른 비즈니스 로직을 처리 할 수 ​​있습니다.

답변

0

연결 해제시 매개 변수를 전달할 수 있다고 생각하지 않습니다.

세션 ID를 키로 사용하는 간단한 맵을 구현할 수 있으며 값은 연결시 클라이언트에서 캡처 한 값을 보유하는 개체입니다.

+0

2) 특히 그다지 예민하지는 않습니다. 어쨌든 일종의 국가를 저장하는 것을 의미하기 때문입니다. – tduchateau