java通过okhttp调用SSE流式接口,并将消息返回给客户端
以下是一个使用OkHttp调用SSE(Server-Sent Events)流式接口并将消息返回给客户端的Java代码示例:
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.Call;
import okhttp3.EventListener;
import okhttp3.RealCall;
import okhttp3.ResponseBody;
import okio.BufferedSource;
import okio.Okio;
import java.io.IOException;
public class SseClientExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://example.com/sse-endpoint")
.build();
// 启动调用
RealCall call = (RealCall) client.newCall(request);
call.enqueue(new EventListener() {
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
ResponseBody body = response.body();
if (body != null) {
BufferedSource source = body.source();
source.request(Long.MAX_VALUE); // 读取全部数据
Buffer buffer = source.buffer();
// 处理SSE消息
while (!source.exhausted()) {
String line = source.readUtf8Line();
if (line.startsWith("data: ")) {
String data = line.substring("data: ".length());
System.out.println("Received data: " + data);
// 处理接收到的数据
}
}
}
}
}
@Override
public void onFailure(Call call, IOException e) {
// 处理错误情况
e.printStackTrace();
}
});
}
}
这段代码创建了一个OkHttpClient实例,构建了一个请求指向SSE接口,并使用enqueue
方法异步发起了请求。在响应事件中,它读取了响应体并逐行处理SSE格式的数据。每当收到前缀为"data: "的行时,它就会提取数据并打印出来。这只是一个简化的示例,实际应用中你可能需要处理连接失败、重新连接等情况,并且确保线程安全地处理UI更新等操作。
评论已关闭