首页 > 解决方案 > 使用 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 流?

标签: javaapache-httpclient-4.xserver-sent-events

解决方案


推荐阅读