【问题标题】:How to Read SSE event stream at server side instead of browser如何在服务器端而不是浏览器读取 SSE 事件流
【发布时间】:2018-10-21 12:40:57
【问题描述】:

我正在创建一个应用程序来读取事件流并将信息保存在我的数据库中。

我有一个网址:http://xx.xx.xx.xx:8080/restconf/streams/mno-vnf-event/json 需要标头:Accept:text/event-streamAuthorization:Basic YWRtaW46o99RtaW4-Content-Type:application/yang-data+json

现在我想使用 java(不是 javascript 代码)从上面的 API 获取流,任何人都有想法来完成这个。

【问题讨论】:

    标签: server-sent-events event-stream


    【解决方案1】:

    您可以使用一些支持 SSE 的 Java 库:

    这些是我首先想到的,但毫无疑问还有更多。

    【讨论】:

    • 没有找到任何选项来添加自定义标头以从 Jersey 或 Spring WebClient 发出 SSE 请求。想要在请求中添加如下头:Authorization:Basic YWRtaW46o99RtaW4-Accept:text/event-streamContent-Type:application/yang-data+json
    【解决方案2】:

    如果 SSE 服务器严格遵循 SSE 规范,则不能添加任何自定义标头。

    尽管如此,如果是这样,您是否尝试过使用 Spring WebFlux Client 进行类似的操作:

    ResolvableType type = forClassWithGenerics(ServerSentEvent.class, String.class);
    
    WebClient client = WebClient.create();
    client.get()
          .uri("http://localhost:8080/sse")
          .accept(TEXT_EVENT_STREAM)
          .header("MyHeader", "Foo") // Add your headers here.
          .exchange()
          .flatMapMany(response -> response.body(toFlux(type)))
          .subscribe(System.out::println,
                     Throwable::printStackTrace);
    

    我已经针对 SSE Undertow 服务器测试了这段代码。它似乎有效:Undertow 能够获取已发送的自定义标头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2014-10-06
      • 2019-01-10
      • 1970-01-01
      相关资源
      最近更新 更多