I/O 中级

使用 java.net.http 的 WebSocket 客户端

使用标准异步 WebSocket 客户端,无需添加第三方依赖。

✕ Third-party library
WebSocketClient client =
    new WebSocketClient(serverUri) {
        @Override
        public void onMessage(String message) {
            handle(message);
        }
    };
client.connect();
✓ Java 11+
HttpClient.newHttpClient()
    .newWebSocketBuilder()
    .buildAsync(serverUri,
        new WebSocket.Listener() {
            @Override
            public CompletionStage<?> onText(
                    WebSocket socket,
                    CharSequence data,
                    boolean last) {
                handle(data.toString());
                return WebSocket.Listener.super
                    .onText(socket, data, last);
            }
        });
发现此代码有问题? 告诉我们。
📦

无额外依赖

WebSocket 客户端随 JDK 一同提供。

🧵

异步 API

连接和消息处理可与 CompletionStage 组合。

🔗

共享 HTTP 栈

代理、TLS 和执行器配置使用标准 JDK 设施。

旧方式
第三方 WebSocket 客户端
现代方式
java.net.http.WebSocket
自 JDK
11
难度
中级
使用 java.net.http 的 WebSocket 客户端
可用

自 JDK 11 起广泛可用(2018 年 9 月)

java.net.http 包含与标准 HTTP 客户端集成的异步 WebSocket 客户端。连接通过 CompletableFuture 建立,监听器回调借助 CompletionStage 支持非阻塞消息处理,并且客户端共享 JDK 标准的代理、TLS 和执行器配置。