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




TLDR: вы можете создать событие «ping» следующим образом: ServerSentEvent.builder("").data(null).comment("").build()
Это создаст :\n\n в текстовом потоке.
Мне пришлось прочитать исходный код ServerSentEventHttpMessageWriter
Код создает событие, используя комментарий с префиксом :, поэтому клиент его игнорирует. А затем, поскольку комментарий представляет собой просто пустую строку, он добавит \n впоследствии, а поскольку другие поля не установлены, он добавит еще один \n в конце. Обратите внимание, что мне нужно было использовать только builder(""), чтобы заставить мой тип работать (по крайней мере, пока).
В котлине вы можете использовать ServerSentEvent.builder<String>().comment("").build()