Можно ли использовать текст / поток событий с помощью JavaScript в WebBrowser?
У нас есть служба отдыха, которая возвращает
text/event-stream
из конечной точки POST, которая содержит серию объектов JSON.(Это Spring Boot / Kotlin RestController, который возвращает
kotlinx.coroutines.flow.Flow<SomeJSONObject>
Теперь мы хотим использовать этот поток событий в веб-приложении angular, обрабатывая каждый объект по мере его поступления. К сожалению, мы не знаем, как это работает. Мы пробовали очевидные вещи, например:
this.http.post(url, request)
или же
this.http.post(url, request).toPromise().then(value => ...
и
this.http.post(url, request).subscribe(value => ...
Похоже, браузер даже не запрашивает и не получает никаких данных. Внутренняя служба работает нормально, мы можем убедиться в этом, вызвав конечную точку, например, с помощью почтальона.
Было бы неплохо иметь какие-либо подсказки, как это работает в JavaScript, тогда это также будет работать в angular.
1 ответ
text/event-stream
это тип mime, связанный с событиями, отправленными сервером. Вы можете прочитать о них больше и увидеть некоторые примеры кода здесь, а в Интернете есть множество руководств, показывающих, как использовать их с Angular, например этот .
Вот простой пример обработки отправленного сервером события в простом Javascript:
yourSSEURL
это URL-адрес, который возвращает текст/поток событий:
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("yourSSEURL");
source.onmessage = function(event) {
document.getElementById("result").innerHTML += event.data + "<br>";
};
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}