Как отправить событие «ping» в SSE spring-web

Я пытаюсь реализовать спецификацию graphql-sse в java, и для этого я хочу иметь возможность отправлять событие сердцебиения. Это можно сделать, отправив событие: :\n\n в поток событий.

Однако, чтобы сделать это, я не могу отправить объект ServerSentEvent, потому что для этого требуется создать полный объект, тогда как это не полный объект, это просто пустое событие. Я также не вижу никакой документации по пружинному пингу клиента, чтобы узнать, открыто ли соединение.

Любая помощь будет принята с благодарностью.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TLDR: вы можете создать событие «ping» следующим образом: ServerSentEvent.builder("").data(null).comment("").build()

Это создаст :\n\n в текстовом потоке.

Мне пришлось прочитать исходный код ServerSentEventHttpMessageWriter

Код создает событие, используя комментарий с префиксом :, поэтому клиент его игнорирует. А затем, поскольку комментарий представляет собой просто пустую строку, он добавит \n впоследствии, а поскольку другие поля не установлены, он добавит еще один \n в конце. Обратите внимание, что мне нужно было использовать только builder(""), чтобы заставить мой тип работать (по крайней мере, пока).

В котлине вы можете использовать ServerSentEvent.builder<String>().comment("").build()

Другие вопросы по теме