Вывод Spring SseEmitter представляется искаженным - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь настроить отправленные события сервера, используя Spring Boot с клиентом Python. К сожалению, мой клиент на Python не читает данные, а печатает пустую строку. Я проанализировал поток TCP с помощью Wireshark, и выяснилось, что Spring отправляет поля «data:» в виде нескольких строк, что противоречит спецификации SSE.

Мой код Java, который отправляет сообщение:

What what = new What(); // this class just has a payload string field and a getter and a setter
what.setPayload( data ); // data is just a string
SseEmitter.SseEventBuilder builder = SseEmitter.event( ).data( what, MediaType.APPLICATION_JSON ).name( "event-name" ).id( "my-event-id-1234" );
emitter.send( builder );

Поток TCP, отправленный с сервера после трехкратного вызова вышеуказанного кода, выглядит следующим образом:

HTTP/1.1 200 
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: content-type, x-requested-with, authorization
X-Application-Context: application:8080
Cache-Control: no-store
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
Content-Type: text/event-stream;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 15 Apr 2019 21:49:17 GMT

5
data:
2b
{"payload":"HELLO THIS IS FROM THE SERVER"}
27

event:event-name
id:my-event-id-1234


5
data:
2b
{"payload":"HELLO THIS IS FROM THE SERVER"}
27

event:event-name
id:my-event-id-1234


5
data:
2b
{"payload":"HELLO THIS IS FROM THE SERVER"}
27

event:event-name
id:my-event-id-1234

Обратите внимание, что только данные искажены. Поля события и идентификатора отображаются в одной строке, как и ожидалось. Я пробовал несколько других способов: отправка только строки, отправка объекта без установки события и идентификатора и т. Д. Данные ВСЕГДА выходят с номером, спецификатором данных, числом и фактической полезной нагрузкой, все в разных строках.

Строки с шестнадцатеричными значениями, кажется, уведомляют синтаксический анализатор о том, что следующая строка содержит так много байтов, но эта информация нигде не описана в спецификации SSE на https://www.w3.org/TR/eventsource/

Это баг весной? Есть ли где-нибудь опция конфигурации, которую я могу настроить, чтобы данные распечатывались так же, как событие и идентификатор?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...