2016-12-13 1 views
2

를 감지 할 수 있습니다 어떻게 내가이 클래스가봄 웹 소켓은 내가 클라이언트 분리

봄 새로운입니다. ApplicationListener를 구현했는데 청취자를 등록 할 수있는 방법이 명확하지 않습니까? web.xml에서이 작업을 수행해야합니까? 당신은

또 다른 방법은 ApplicationEvents을 사용하여 인터셉터를 제공 configureClientOutboundChannel 및 AbstractWebSocketMessageBrokerConfigurer의 configureClientInboundChannel를 오버라이드 (override) 할 필요가

답변

2

WebSocketHandlerafterConnectionClosed 함수는 websocket 클라이언트 연결이 끊어진 후에 호출됩니다. handleTextMessage을 무시하는 방식으로이를 재정의해야합니다.

클라이언트 연결 끊기와 서버 이벤트 감지 사이에 상당한 지연이있을 수 있습니다. See details about real-time disconnection detection.

1

.

두 가지 방법이 여기에 설명되어 있습니다 이 http://www.sergialmar.com/2014/03/detect-websocket-connects-and-disconnects-in-spring-4/

public class StompConnectEvent implements ApplicationListener<SessionConnectEvent> { 

private final Log logger = LogFactory.getLog(StompConnectEvent.class); 

public void onApplicationEvent(SessionConnectEvent event) { 
    StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage()); 

    String company = sha.getNativeHeader("company").get(0); 
    logger.debug("Connect event [sessionId: " + sha.getSessionId() +"; company: "+ company + " ]"); 
} 

}

내가 그 도움을 바랍니다. 더 설명 할 필요가 있으면 알려주세요.

0

달성하고자하는 것은 여러 세션을 유지 관리하는 것입니다. 다음과 같은 것 :

public class Server extends TextWebSocketHandler implements WebSocketHandler { 

    private List<WebSocketSession> sessions = new ArrayList<>(); 

    @Override 
    public void afterConnectionEstablished(WebSocketSession session) { 
     sessions.add(session); 
    } 

    @Override 
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) { 
     sessions.remove(session); 
    } 

    @Override 
    public void handleTextMessage(WebSocketSession session, TextMessage message) { 
     // clientsession = session; 
     // Send individual or broadcast messages here ... 
     session.sendMessage(new TextMessage(textMessage + "!")); 
    } 
} 
1

세션이 연결되거나 닫힐 때 감지 할 수 있습니다.

@Component 
public class SessionConnectedEventListener implements ApplicationListener<SessionConnectedEvent> { 

    private IWebSocketSessionService webSocketSessionService; 

    public SessionConnectedEventListener(IWebSocketSessionService webSocketSessionService) { 
     this.webSocketSessionService = webSocketSessionService; 
    } 

    @Override 
    public void onApplicationEvent(SessionConnectedEvent event) { 
     webSocketSessionService.saveSession(event); 
    } 
} 

예 세션이 disconneted 때 감지하는 방법은 다음과 같습니다 :

@Component 
public class SessionDisconnectEventListener implements ApplicationListener<SessionDisconnectEvent> { 

    private IWebSocketSessionService webSocketSessionService; 

    public SessionDisconnectEventListener(IWebSocketSessionService webSocketSessionService) { 
     this.webSocketSessionService = webSocketSessionService; 
    } 

    @Override 
    public void onApplicationEvent(SessionDisconnectEvent event) { 
     webSocketSessionService.removeSession(event); 
    } 
} 
link.

예에서 찾을 수 있습니다 청취자에 대한 자세한 내용은 방법 연결된 세션을 감지

관련 문제