Я немного узнал о Spring 5 WebFlux, реактивном программировании и веб-сокетах. Я смотрел Spring Tips: Reactive WebSockets with Spring Framework 5 Джоша Лонга. Код, который отправляет данные с сервера на клиент через соединение WebSocket, использует Spring Integration IntegrationFlow
, который публикуется в PublishSubcribeChannel
, на который подписан пользовательский MessageHandler
, который принимает сообщение, преобразует его в объект, который затем преобразуется в Json и передается в FluxSink
из обратного вызова, предоставленного Flux.create (), который используется для отправки в WebSocketConnection
.
Мне было интересно, является ли использование IntegrationFlow
и PublishSubscribeChannel
рекомендуемым способом передачи событий из фонового процесса клиенту или это просто более удобно в данном конкретном примере (мониторинг файловой системы). Я бы подумал, если у вас есть контроль над фоновым процессом, вы могли бы передать его напрямую FluxSink
?
Я думаю о вариантах использования, подобных следующему:
- процесс машинного обучения, прогресс которого отслеживается
- обновления состояния игрового мира, которые отправляются игрокам
- чаты / программное обеспечение для совместной работы
- ...