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