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、エグゼキュータ設定を共有します。