Как транслировать сообщения в Spring Reactive Websocket API? - PullRequest
0 голосов
/ 02 марта 2019

Я разрабатываю простой чат.Мне действительно нравится весенний API websocket на основе Tomcat, но есть одна проблема.Tomcat использует модель на основе потоков.Если у меня около 500 онлайн-пользователей, tomcat запускает 200 потоков (значение по умолчанию), и мой процессор умирает.Поэтому мне нужна реализация websocket, основанная на цикле обработки событий.Я решил попробовать новый весенний реактивный API с веб-сокетами.

Итак, мне нужен чат с чатами.Когда какой-либо пользователь отправляет сообщение в чате, он должен быть отправлен всем пользователям в чате.

Spring предлагает следующий API:

@Service
public class ChatWebSocketHandler implements WebSocketHandler {

    @Override
    public Mono<Void> handle(WebSocketSession session) {
        Mono<Void> input =  ;
        Mono<Void> output = ;

        return Mono.zip(input, output).then();
    }
}

Не существует API для обнаружения *События 1008 * и disconnected (как это было с Tomcat).Поэтому я не могу сохранить коллекцию active sessions, которую можно использовать для трансляции сообщений.

1 Ответ

0 голосов
/ 03 марта 2019

Есть хорошая статья, в которой рассказывается о реализации глобального чат-приложения, использующего webflux в сочетании с websockets how-to-build-a-chat-app-using-webflux-websockets-Reaction .Вы должны быть в состоянии понять API через его код и изменить его, чтобы удовлетворить ваши потребности в нескольких чатах.

Он также описывает, как вы можете прослушивать подключения и отключения «событий».Вы можете найти соответствующий проект на github: java-реагирующий-чат .

...