Spring中的服务器发送事件客户端示例

Posted

技术标签:

【中文标题】Spring中的服务器发送事件客户端示例【英文标题】:Server-Sent Event Client example in Spring 【发布时间】:2017-08-22 06:42:08 【问题描述】:

我们的团队为特定任务开发了服务器发送事件 (SSE)。

我正在尝试构建一个客户端来监听来自我们服务器的事件流。 我已经设法使用 Java 的 Jersey 库来做到这一点。 但是,由于我们的大多数客户端代码都使用 Spring,所以我想举一个例子来说明如何使用 Spring 来完成。

我能够在 Spring 服务器端的 SSE 上找到许多示例。但是我找不到客户端的任何文档。

Spring 是否在客户端支持 SSE? 如果是的话,我可以举一个例子来说明如何使用 Spring 实现以下目标......

向我们的服务器发送 HTTP GET 请求... 获取 -> http://example.com/api/events/ 标题 -> 接受:文本/事件流 sessionKey:someString

响应将是一个文本流,客户端将继续接收,直到客户端选择关闭连接。

【问题讨论】:

几乎所有示例都是客户端(基于浏览器),只有服务器端实现是 Spring。我也一直在寻找基于 Spring 的客户端。 【参考方案1】:

看看 Spring RestTemplate 的其中一种执行方法。它们都以ResponseExtractor 作为参数。这个回调接口定义了一个方法:extractData(ClientHttpResponse response)。通过提供您自己的 ResponseExtractor,您可以对响应执行您想要的操作,例如逐行读取它。天真的例子:

restTemplate.execute(a_url, HttpMethod.GET, request -> 
        , response -> 
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getBody()));
            String line;
            try 
                while ((line = bufferedReader.readLine()) != null) 
                    System.out.println("Got some data, let's use my ObjectMapper to parse into something useful!");
                
             catch (IOException e) 
                //Something clever
            
            return response;
        );

【讨论】:

以上是关于Spring中的服务器发送事件客户端示例的主要内容,如果未能解决你的问题,请参考以下文章

服务器发送事件 Spring Webflux 返回事件名称以响应来自休息控制器的响应

Spring Webflux 服务器发送事件 Thymeleaf

Spring中的SSE(服务器端事件)——存储SseEmitters

服务器发送事件 + Java 与 Spring MVC

Spring boot SSE(服务器发送事件):如何动态发送响应

当服务中的事件被触发时,如何将响应从服务发送回客户端?