PHpullh
학습 라이브러리/Java/WebSocket 클라이언트

JAVA · 파일/IO

WebSocket 클라이언트

Java 11+의 WebSocket API로 실시간 양방향 통신을 구현합니다.

파일/IO고급WebSocket양방향통신실시간Java11

핵심 설명

Java 11+의 WebSocket API로 실시간 양방향 통신을 구현합니다.

Java code

import java.net.http.*;
import java.net.URI;
import java.util.concurrent.*;

public class WebSocketDemo {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        CompletableFuture<Void> done = new CompletableFuture<>();

        // WebSocket 연결
        WebSocket ws = client.newWebSocketBuilder()
            .buildAsync(
                URI.create("wss://echo.websocket.events"),
                new WebSocket.Listener() {
                    @Override
                    public void onOpen(WebSocket webSocket) {
                        System.out.println("연결됨!");
                        webSocket.request(1); // 메시지 요청
                    }

                    @Override
                    public CompletionStage<?> onText(WebSocket webSocket,
                            CharSequence data, boolean last) {
                        System.out.println("수신: " + data);
                        webSocket.request(1);
                        if (data.toString().contains("종료")) {
                            done.complete(null);
                        }
                        return CompletableFuture.completedFuture(null);
                    }

                    @Override
                    public CompletionStage<?> onClose(WebSocket webSocket,
                            int statusCode, String reason) {
                        System.out.printf("닫힘: %d %s%n", statusCode, reason);
                        done.complete(null);
                        return CompletableFuture.completedFuture(null);
                    }

                    @Override
                    public void onError(WebSocket webSocket, Throwable error) {
                        System.err.println("에러: " + error.getMessage());
                        done.complete(null);
                    }
                }).join();

        // 메시지 전송
        ws.sendText("Hello WebSocket!", true);
        ws.sendText("종료", true);

        done.get(10, TimeUnit.SECONDS);
        ws.sendClose(WebSocket.NORMAL_CLOSURE, "정상 종료");
    }
}

학습 팁

request(1)로 배압을 제어합니다. 메시지를 처리한 후 다음 메시지를 요청하면 과부하를 방지할 수 있습니다.

주의할 점

WebSocket Listener의 메서드에서 예외가 발생하면 연결이 끊어집니다. 모든 콜백에서 예외 처리를 하세요.

자주 묻는 질문

WebSocket 클라이언트란 무엇인가요?

Java 11+의 WebSocket API로 실시간 양방향 통신을 구현합니다.

WebSocket 클라이언트 학습 시 주의할 점은 무엇인가요?

WebSocket Listener 의 메서드에서 예외가 발생하면 연결이 끊어집니다. 모든 콜백에서 예외 처리를 하세요.