使用 Java HttpClient 接收 SSE 流数据

服务器发送事件 (SSE) 是一种用于从服务器向客户端推送数据的技术。在 Java 11 及更高版本中,你可以使用 java.net.http.HttpClient 方便地接收 SSE 流数据。

以下代码示例演示了如何使用 HttpClient 发送 GET 请求到 SSE 端点,并将响应体转换为 InputStream 流,然后使用 Scanner 逐行读取流数据:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

public class SSEClient {
    public static void main(String[] args) throws Exception {
        HttpClient httpClient = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("http://example.com/sse-endpoint")) // 替换为实际的SSE端点URL
                .build();

        httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream())
                .body()
                .onClose(() -> System.out.println("连接已关闭")) // 当连接关闭时打印消息
                .transferTo(System.out); // 将流数据输出到标准输出

        // 或者使用Scanner逐行读取流数据
        // InputStream inputStream = httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream()).body();
        // Scanner scanner = new Scanner(inputStream);
        // while (scanner.hasNextLine()) {
        //     String line = scanner.nextLine();
        //     System.out.println(line);
        // }
    }
}

代码解释:

  1. 创建 HttpClient: HttpClient httpClient = HttpClient.newHttpClient();
  2. 构建 HttpRequest: 创建一个 GET 请求,目标 URL 是 SSE 端点 (http://example.com/sse-endpoint),你需要将其替换为实际的 SSE 端点 URL。
  3. 发送请求并获取 InputStream: 使用 httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream()) 发送请求,并使用 HttpResponse.BodyHandlers.ofInputStream() 将响应体转换为 InputStream 流。
  4. 处理流数据: 可以直接将 InputStream 输出到标准输出 (System.out),或者使用 Scanner 逐行读取流数据并进行自定义处理。

注意:

  • 上述示例仅适用于 Java 11 及更高版本,因为 java.net.http.HttpClient 是在 Java 11 中引入的。
  • 如果你使用的是 Java 8 或更早版本,你可以考虑使用第三方库,如 Apache HttpClient 或 OkHttp 来处理 SSE 流数据。
Java 使用 HttpClient 接收 SSE 流数据

原文地址: http://www.cveoy.top/t/topic/fUR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录