동일한 응용 프로그램 내에서 때로는 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) 세션 연결 해제 중에 비즈니스 데이터를 전달할 수있는 방법이 있습니까? 그래서 내가 내 애플 리케이션에서 연결이 끊어진 위치에 따라 다른 비즈니스 로직을 처리 할 수 있습니다.
2) 특히 그다지 예민하지는 않습니다. 어쨌든 일종의 국가를 저장하는 것을 의미하기 때문입니다. – tduchateau