[Spring] WebSocket 사용하기

koline·2024년 6월 28일
0

Spring

목록 보기
11/15

1. dependency 추가하기

// build.gradle

...
dependencies {
	...
	implementation 'org.springframework.boot:spring-boot-starter-websocket'
    ...
}
...

2. WebSocketHandler 작성하기

// WebSocketHandler.java

@Component
public class WebSocketHandler extends TextWebSocketHandler {

    private static final ConcurrentHashMap<String, WebSocketSession> CLIENTS = new ConcurrentHashMap<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        CLIENTS.put(session.getId(), session);
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        CLIENTS.remove(session.getId());
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String id = session.getId();  // 세션 ID
        CLIENTS.entrySet().forEach( arg-> {
            if (!arg.getKey().equals(id)) {  // 같은 아이디가 아니면 메시지 전달
                try {
                    arg.getValue().sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

3. WebSocketConfig 작성하기

// WebSocketConfig.java

@Configuration
@EnableWebSocket
@RequiredArgsConstructor
public class WebSocketConfig implements WebSocketConfigurer {

    private final WebSocketHandler webSocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketHandler, "/chat").setAllowedOrigins("*");
    }
}

4. 테스트

PostMan을 사용해 ws://localhost:8080/chat로 접속

정상 접속이 확인된다.

동일한 창을 두개 띄우고 두 창 모두 ws://localhost:8080/chat로 접속

첫번째 창에서 메세지 전송

두번째 창에서 수신 확인

두번째 창에서 답신 전송

첫번째 창에서 메세지 수신 확인




참조


[Web] WebSocket 이란?

profile
개발공부를해보자

0개의 댓글

관련 채용 정보