Весна получить открытые соединения через сокет - PullRequest
1 голос
/ 24 апреля 2020

Я использую 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? Что я делаю неправильно? Любые советы или альтернативы?

Заранее спасибо!

...