Spring WebSocket-如何获取会话数 [英] Spring websocket - how to get number of sessions

查看:763
本文介绍了Spring WebSocket-如何获取会话数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用教程,并且我试图弄清楚了解如何获取当前会话数.

I'm using this tutorial and I'm trying to figure out how to get the number of current sessions.

我的WebSocketConfig看起来像这样(从教程中复制并粘贴):

My WebSocketConfig looks like this (copy and paste from the tutorial) :

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/gs-guide-websocket").withSockJS();
    }

}

我想知道此类的会话数(再次复制和粘贴):

I'd like to know the number of sessions inside of this class (again copy and paste):

@Controller
public class GreetingController {


    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {
        Thread.sleep(1000); // simulated delay
        return new Greeting("Hello, " + message.getName() + "!");
    }

}

是否有一种简单的方法来获取当前到Websocket的会话数(用户,连接数)?

Is there an easy way to get the number of current sessions(users, connections) to the websocket?

这是我的解决方案:

Set<String> mySet = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>());

@EventListener
private void onSessionConnectedEvent(SessionConnectedEvent event) {
    StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage());
    mySet.add(sha.getSessionId());
}

@EventListener
private void onSessionDisconnectEvent(SessionDisconnectEvent event) {
    StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage());
    mySet.remove(sha.getSessionId());
}

我现在可以通过mySet.size()获得会话数.

I can now get the number of Sessions with mySet.size() .

推荐答案

您可以使用 ApplicationContext 事件.每个连接,订阅或其他操作都会触发一个特殊事件: SessionConnectEvent SessionConnectedEvent SessionSubscribeEvent 等.

You can use ApplicationContext events. Every connection, subscription or other action will fire a special event: SessionConnectEvent, SessionConnectedEvent, SessionSubscribeEvent and so on.

完整文档为此处.这些事件之一触发时,您可以使用自己的逻辑进行处理.

Full doc is here. When one of these events fires, you can handle it with your own logic.

供参考的示例代码:

@EventListener(SessionConnectEvent.class)
public void handleWebsocketConnectListner(SessionConnectEvent event) {
    logger.info("Received a new web socket connection : " + now());
}

@EventListener(SessionDisconnectEvent.class)
public void handleWebsocketDisconnectListner(SessionDisconnectEvent event) {
    logger.info("session closed : " + now());
}

这篇关于Spring WebSocket-如何获取会话数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆