Spring Webflex: сервер Pu sh отправил событие конкретным пользователям c - PullRequest
0 голосов
/ 12 апреля 2020

Я следил за этим для справки. Я занимаюсь разработкой приложения для весенней загрузки, в котором будут аутентифицированные пользователи. После входа в систему пользователь подписывается на событие, посещая указанный c URL.

Это приложение с весенней загрузкой также будет поддерживать MQTT (или, возможно, только HTTP-запросы), в котором информация для указания c пользователь будет отправлен. Затем я хотел бы отобразить эту отправленную информацию пользователю, используя веб-поток / SSE, если пользователь подписался.

Многие пользователи могут войти в систему в любой момент времени, и все они будут подписаны на обновления. Как мне управлять всеми различными приемниками для каждого вошедшего в систему пользователя?

Я считаю, что можно получить текущего пользователя, когда они посещают аутентифицированный URL, но каков способ хранения всех приемников для каждого вошедшего в систему пользователь?

Я ценю это.

1 Ответ

0 голосов
/ 13 апреля 2020

Вы уже получили ответ в разделе комментариев.

Предположим, что это формат сообщения, который вы будете публиковать.

public class Message {

    private int intendedUserId;
    private String message;

    // getters and setters

}

Просто есть 1 процессор и приемник от процессора .

 FluxProcessor<Message> processor;
 FluxSink<Message> sink;

Pu sh все сообщения через приемник.

sink.next(msg);

Ваш контроллер будет более или менее таким. Здесь я предполагаю, что у вас есть какой-то метод для получения идентификатора пользователя authtoken.getUserId(). Здесь фильтр является частью Flux.

@GetMapping(value = "/msg", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Message> getMessages(){
    return processer
                .filter(msg -> msg.getIntendedUserId() == authtoken.getUserId());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...