gpt4 book ai didi

java - Spring websocket - 如何获取 session 数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:28 42 4
gpt4 key购买 nike

我正在使用 this教程,我正在尝试弄清楚如何获取当前 session 数。

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

@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();
}

}

我想知道这个类中的 session 数(再次复制和粘贴):

@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() + "!");
}

}

有没有一种简单的方法可以获取当前 session (用户、连接)到 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() 获取 session 数。

最佳答案

您可以使用 SimpUserRegistry 及其 getUserCount() 方法来代替手动处理连接。

例子:

@Autowired
private SimpUserRegistry simpUserRegistry;

public int getNumberOfSessions() {
return simpUserRegistry.getUserCount();
}

关于java - Spring websocket - 如何获取 session 数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39677660/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com