首页 > 解决方案 > 是否可以在 WebBrowser 中使用 JavaScript 使用文本/事件流?

问题描述

我们有一个text/event-stream从 POST 端点返回的 Rest 服务,其中包含一系列 JSON 对象。(它是一个返回 a 的 Spring Boot / Kotlin RestController kotlinx.coroutines.flow.Flow<SomeJSONObject>)现在我们想在一个有角度的 WebApplication 中使用这个事件流,在每个对象到达时对其进行处理。不幸的是,我们不知道这是如何工作的。我们尝试了显而易见的事情,例如:

this.http.post(url, request)

或者

this.http.post(url, request).toPromise().then(value => ...

this.http.post(url, request).subscribe(value => ...

似乎浏览器甚至没有发出请求,也没有收到任何数据。后端服务工作正常,我们可以通过使用例如 postman 调用端点来看到这一点。

有任何暗示这在 JavaScript 中是如何工作的就足够了,然后它也可以在 Angular 中工作。

标签: javascriptangularevent-streamkotlinx.coroutines.flow

解决方案


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...";
}

推荐阅读