使用Spring Websocket支持/ Stomp

时间:2017-01-18 18:32:26

标签: spring stomp spring-websocket

在同一个应用程序中,有时我需要跟踪websocket会话(dis)连接,有时不需要。

为了跟踪SessionConnectedEvent,我只是在连接时传递一些标题,例如在以下示例中:

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)时,除sessionId内的StompHeaderAccessor外,我看不到任何其他内容。没有一个引用回原始会话/客户端信息。 : - (

1)是否存在更好/更清晰的方式来区分会话连接事件而不是使用连接上的标头?

2)在会话断开连接期间有没有办法传递业务数据?因此,我可以处理不同的业务逻辑,具体取决于我的应用程序中断开连接的位置。

1 个答案:

答案 0 :(得分:0)

我认为你不能在断开连接时传递参数。

您可以实现一个将会话ID作为键的简单映射,该值是一个对象,其中包含您在连接时从客户端捕获的值。