Я использую Spring Boot Websocket, чтобы мой микросервис Spring Boot 2 мог работать с соединениями через веб-сокет.
Моя конфигурация:
@Configuration
@EnableWebSocket
public class WsConfig implements WebSocketConfigurer {
@Autowired
WebSocketHandler webSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
DefaultHandshakeHandler handshakeHandler = new DefaultHandshakeHandler();
handshakeHandler.setSupportedProtocols(HANDSHAKE_PROTOCOL);
registry.addHandler(webSocketHandler, WS_HANDLER_PATH + WILDCARD)
.setAllowedOrigins("*")
.setHandshakeHandler(handshakeHandler);
}
}
Мои клиенты могут подключаться к моей службе через WebSocket. Я реализую WebSocketHandler
интерфейс для обработки сообщений и журналов соединений.
Теперь мой вопрос: есть ли способ показать всех текущих пользователей / сессий websocket? Я пытался использовать SimpUserRegistry:
@Configuration
public class UserConfig {
final private SimpUserRegistry userRegistry = new DefaultSimpUserRegistry();
@Bean
public SimpUserRegistry userRegistry() {
return userRegistry;
}
}
и показывать пользователей через конечную точку REST
@RestController
public class WebSocketManager {
private final SimpUserRegistry userRegistry;
public WebSocketManager(SimpUserRegistry userRegistry) {
this.userRegistry = userRegistry;
}
@GetMapping(path = "/users")
public List<String> getConnectedUsers() {
userRegistry.getUsers().stream()
.map(SimpUser::getName)
.forEach(System.out::println);
System.out.println("Users " + userRegistry.getUsers());
System.out.println("UsersCount " + userRegistry.getUserCount());
return this.userRegistry
.getUsers()
.stream()
.map(SimpUser::getName)
.collect(Collectors.toList());
}
}
Но это всегда дает мой пустой список: []
, даже когда очевидно Соединения WS установлены.
Работает ли SimpUserRegistry
с системой Websocket Spring, которая настроена на WebSocketConfigurer
и @EnableWebSocket
? Что я делаю неправильно? Любые советы или альтернативы?
Заранее спасибо!