Несколько клиентских подписок на Spring Websocket - PullRequest
0 голосов
/ 06 февраля 2019

Моя цель - разрешить нескольким клиентам подписываться на веб-сокет, однако документация Spring, по-видимому, очень ограничена. WRT делает это.

Текущий обработчик веб-сокета реализован следующим образом:

@Component("ReactiveWebSocketHandler")
public class ReactiveWebSocketHandler implements WebSocketHandler {

    private final Flux<String> flux;

    public ReactiveWebSocketHandler() throws IOException {
        this.flux = new MyFlux();

    @Override
    public Mono<Void> handle(WebSocketSession webSocketSession) {
        return webSocketSession
                .send(flux.map(webSocketSession::textMessage))
                .and(webSocketSession.receive()
                        .map(WebSocketMessage::getPayloadAsText).log());
    }
} 

При этом у нас есть поток строк, который отправляется клиенту.Теперь класс конфигурации websocket выглядит следующим образом:

@Configuration
public class ReactiveWebSocketConfiguration {

    @Autowired
    @Qualifier("ReactiveWebSocketHandler")
    private WebSocketHandler webSocketHandler;

    @Bean
    public HandlerMapping webSocketHandlerMapping() {
        Map<String, WebSocketHandler> map = new HashMap<>();
        map.put("/emitter", webSocketHandler);
        SimpleUrlHandlerMapping handlerMapping = new SimpleUrlHandlerMapping();
        handlerMapping.setOrder(1);
        handlerMapping.setUrlMap(map);
        return handlerMapping;
    }

    @Bean
    public WebSocketHandlerAdapter handlerAdapter() {
        return new WebSocketHandlerAdapter();
    }
}

В настоящее время не более одного клиента может подписаться на услугу.Я пытаюсь выяснить, как заставить произвольное число клиентов прослушивать сообщения в одной и той же конечной точке /emitter.

Попытался создать дополнительные копии тех же обработчиков веб-сокетов и поместить их вкарта обработчиков, но безрезультатно.

...