java - 使用 Apache Java HTTPClient 的服务器发送事件
问题描述
我想在客户端使用 Apache HTTPClient 创建 SSE 连接。我有正在向客户端发送文本/事件流数据的服务器。我想用 java 编写客户端,它会使用 apache HTTPClient 打开 SSE 连接并监听从服务器接收到的数据。
以下是我尝试执行此操作的代码,但只收到一个响应,但服务器每 2 秒发送一次响应。
new Thread(new Runnable() {
@Override public void run() {
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpGet httpget = new HttpGet("http://localhost:9000/sse");
httpget.addHeader("Accept", "text/event-stream");
System.out.println("Executing request " + httpget.getRequestLine());
// Create a custom response handler
ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
@Override public String handleResponse(final HttpResponse response) throws ClientProtocolException, IOException {
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
HttpEntity entity = response.getEntity();
System.out.println("Hey..." + entity);
return entity != null ? EntityUtils.toString(entity) : null;
} else {
throw new ClientProtocolException("Unexpected response status: " + status);
}
}
};
httpclient.execute(httpget, responseHandler);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
以下是服务器发送的响应标头
"Content-Type: text/event-stream"
"Cache-Control: no-cache"
"Connection: keep-alive"
"Transfer-Encoding: chunked"
有没有办法使用 Apache HttpClient 收听实时 SSE 流?
解决方案
推荐阅读
- elasticsearch - 使用 logstash 同时将数据插入两个不同的 Elasticsearch 索引
- html - HTML 包含多少种类型的标题?
- flutter - 电话包构建失败
- php - include_once 在 php 脚本上导致 505
- typescript - 如何发布包含 CSS 模块的基于 TypeScript 的 npm 模块?
- sql - 防止 SQLite 查询执行 USE TEMP B-TREE FOR GROUP BY
- c++ - 移动后重用变量
- javascript - 本地存储不获取超过 6 个项目
- python - TypeError: * 之后的 f() 参数必须是可迭代的,而不是浮点数
- javascript - 想用子数组创建数组,这样我就可以遍历 JSON