Я хочу обработать результаты долгоживущего HTTP-соединения с сервера, который я интегрирую с , как они происходят . Этот сервер возвращает одну строку JSON (\n
с разделителями) для каждого "события" для обработки.
Учитывая экземпляр Stream
, назначенный переменной changeStream
, которая представляет байты из открытого HTTP-соединения вот пример того, что я делаю:
(request
- это экземпляр WebRequest
, настроенный для открытия соединения с сервером, с которым я интегрируюсь .)
var response = request.GetResponse();
var changeStream = response.GetResponseStream();
var lineByLine = Observable.Using(
() => new StreamReader(changeStream),
(streamReader) => streamReader.ReadLineAsync().ToObservable()
);
lineByLine.Subscribe((string line) =>
{
System.Console.WriteLine($"JSON! ---------=> {line}");
});
Используя приведенный выше код, я получаю первую строку, отправляемую сервером, но затем ни одну после этого. Ни из первоначального ответа, ни из новых, сгенерированных в режиме реального времени.
- В целях моего вопроса, предположим, что это соединение будет оставаться открытым неопределенно долго.
- Как мне go о том, что system.reactive запускает обратный вызов для каждой линии, когда я с ними сталкиваюсь?
Обратите внимание: этот сценарий не подходит для переключения на SignalR