Сервер Jersey 2 отправлен + клиентская сторона Источник событий не работает должным образом - PullRequest
0 голосов
/ 05 сентября 2018

Я использую майку 2 для реализации отправленного сервером. когда я делаю завиток, я получаю правильный ответ с задержкой в ​​одну секунду, как и ожидалось. Но когда я пытаюсь использовать источник событий со стороны клиента, он ждет завершения всех событий и затем вызывается onmessage. Кроме того, он неоднократно совершает серверные вызовы. Ниже приведен код серверной части и стороны клиента, который я использую Код серверной майки

    @GET
@Path("/serverSentCheck")
@Produces(SseFeature.SERVER_SENT_EVENTS)
@ManagedAsync
public EventOutput serverSentCheck() {
    final EventOutput eventOutput = new EventOutput();
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                for (int i = 0; i < 5; i++) {
                    Thread.sleep(1000);
                    final OutboundEvent.Builder eventBuilder
                    = new OutboundEvent.Builder();
                   // eventBuilder.name("message-to-client");
                    eventBuilder.data(String.class,
                        "Hello world " + i + "!");
                    final OutboundEvent event = eventBuilder.build();
                    eventOutput.write(event);
                }
            } catch (IOException | InterruptedException e) {
                throw new RuntimeException(
                    "Error when writing the event.", e);
            } finally {
                try {
                    eventOutput.close();
                } catch (IOException ioClose) {
                    throw new RuntimeException(
                        "Error when closing the event output.", ioClose);
                }
            }
        }
    }).start();
    return eventOutput;
}

код источника событий на стороне клиента

var source = new EventSource(" https://localhost:7080/api/v1/service/serverSentCheck");
source.onmessage = function(event) {
    console.log(event.data);
    document.getElementById("result").innerHTML += event.data + "<br>";
};

Команда Curl работает нормально

curl  --insecure -H "Accept:text/event-stream" https://localhost:7080/api/v1/service/serverSentCheck

1 Ответ

0 голосов
/ 24 сентября 2018

После того, как почесал голову в течение некоторого времени, я смог выяснить проблему. Упоминание здесь, чтобы это могло помочь кому-то еще, кто сталкивается с той же самой проблемой. На моей стороне сервера GZIP был включен по умолчанию. Когда я переключился на сжатие для API и исключил из сервера сжатие, все работает нормально.

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