ServiceEventsClient получает только последнюю строку данных события - PullRequest
1 голос
/ 28 июня 2019

У нас есть сервер SSE, отправляющий события, как показано ниже:

...
event: event_id
data: AQAAAAAAKTUMAQAAAWuY4NWAAAAAAAAAAwcAAD9IAAAAAAApNQ0BAAABa5jlaWAAAAAAAAADAQAA
data: PVQAAAAAACk1DgEAAAFrmOVpYAAAAAAAAAMDAAA/SAAAAAAAKTUPAQAAAWuY5WlgAAAAAAAAAwUA
data: AEE8AAAAAAApNRABAAABa5jlaWAAAAAAAAADBwAAPuQAAAAAACk1EQEAAAFrmOn9QAAAAAAAAAMB
data: AAA88AAAAAAAKTUSAQAAAWuY6f1AAAAAAAAAAwMAAD7kAAAAAAApNRMBAAABa5jp/UAAAAAAAAAD
data: BQAAQNgAAAAAACk1FAEAAAFrmOn9QAAAAAAAAAMHAAA+5AAAAAAAKTUVAQAAAWuY7pEgAAAAAAAA
data: AwEAAD24
...

Два вопроса:

  1. Когда мы используем ServerEventClient, мы можем получить только последнюю строку данных события «AwEAAD24»

  2. Как изменить параметр запроса EventStreamPath, когда клиент получает автоматическое переподключение. Нам нужно отправить параметр "from" для запроса новых данных с сервера SSE. В противном случае сервер SSE будет по-прежнему передавать старые данные клиенту.

Пример кода:

public void testSSE() {
            var client = new ServerEventsClient(SSEServerUri) {
                EventStreamPath = streamUri + queryParam,
                OnConnect = con => Console.WriteLine(con.Data),
                OnHeartbeat = () => Console.WriteLine("heartbeat"),
                OnMessage = e => Console.WriteLine("message data: " + e.data),
                OnException = exp => printerror(exp.Message)
            };
            client.Start();
            Thread.Sleep(Timeout.Infinite);
        }

результат:

...
message data: AwEAAD24
...

1 Ответ

0 голосов
/ 28 июня 2019

Звучит так, как будто вы используете собственный сервер SSE вместо Серверные события ServiceStack * Реализация 1002 *, с которой клиенты серверных событий ServiceStack предназначены для работы, опираясь на ряд мнений, таких каквызов периодической конечной точки тактового импульса, подписка / отмена конечных точек и только одна data полезная нагрузка на кадр SSE вместо нескольких, показанных в вашем примере.

В основном, если вы не используете реализацию событий сервера ServiceStackвы столкнетесь с проблемами совместимости при использовании клиентов событий сервера ServiceStack, и вам следует вместо этого использовать более общую и неисполненную реализацию клиента SSE.

...