Как отправить сообщение конкретным клиентам через веб-сокеты в Spring Webflux? - PullRequest
0 голосов
/ 04 марта 2019

Я новичок в весеннем webflux.Я хочу реализовать приложение websocket весной.Может кто-нибудь, пожалуйста, помогите мне, как я могу отправить сообщение конкретному клиенту среди всех подключенных клиентов.

Код сервера

private void serverLogic(WebSocketSessionHandler sessionHandler, long interval)
{
    sessionHandler
        .connected()
        .subscribe(session -> logger.info("Client Connected [{}]", session.getId()));

    sessionHandler
        .disconnected()
        .subscribe(session -> logger.info("Client Disconnected [{}]", session.getId()));

    Flux<String> receiveAll =
        sessionHandler
            .receive()              
            .subscribeOn(Schedulers.elastic())
            .doOnNext(message -> logger.info("Server Received: [{}]", message));

    Mono<String> receiveFirst =
        sessionHandler
            .receive()
            .subscribeOn(Schedulers.elastic())
            .next();


    //This module is sending data to all the clients that are connected. How do I alter this one?

    Flux<String> send =
        Flux
            .interval(Duration.ofMillis(interval))
            .subscribeOn(Schedulers.elastic())              
            .takeUntil(value -> !sessionHandler.isConnected())
            .map(value -> Long.toString(value))
            .doOnNext(message -> sessionHandler.send(message))
            .doOnNext(message -> logger.info("Server Sent: [{}]", message));

    receiveAll.subscribe();
    receiveFirst.thenMany(send).subscribe();
}
...