💬
소켓 : 양 끝단, 웹에서 연결시켜준다.
WebSocket : 클라이언트(여러 대)와 서버(1대)를 연결한다.
WebSocketSession : 클라이언트 - 서버간 전이중통신을 담당하는 객체 / 클라이언트의 세션을 가로채서 저장하고 있음
synchronizedSet : 동기화된 Set 객체 반환
-> 멀티쓰레드 (줄 안서고 기능들이 서로 실행되려고 함)
환경에서 스레드간의 의도치 않은 충돌을 예방하기 위해서 동기화(줄세움)
🔍 testWebSocketHandler
public class TestWebsocketHandler extends TextWebSocketHandler{
// WebSocketSession : 클라이언트 - 서버간 전이중통신을 담당하는 객체
// 클라이언트의 세션을 가로채서 저장하고 있음
// Set : 중복 X, 순서 X
// synchronizedSet : 동기화된 Set 객체 반환
// -> 멀티쓰레드 (줄 안서고 기능들이 서로 실행되려고 함)
// 환경에서 스레드간의 의도치 않은 충돌을 예방하기 위해서 동기화(줄세움)
private Set<WebSocketSession> sessions
= Collections.synchronizedSet(new HashSet<>());
// - 클라이언트와 연결이 완료되고, 통신할 준비가 되면 실행
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
// 클라이언트 웹소켓 연결을 요청하면 sessions에
// 클라이언트와의 전이중 통신을 담당하는 객체 WebSocketSession을 추가
sessions.add(session);
}
// - 클라이언트로부터 텍스트 메세지를 받았을 때 실행
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
// payload : 통신 시 탑재된 데이터(메시지)
System.out.println("전달 받은 내용 : " + message.getPayload());
}
// - 클라이언트와 연결이 종료되면 실행
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
// sessions에서 나간 클라이언트의 정보를 제거
sessions.remove(session);
}
}
WebSocketHandler 인터페이스 : 웹소켓을 위한 메소드를 지원하는 인터페이스
-> WebSocketHandler 인터페이스를 상속받은 클래스를 이용해 웹소켓 기능을 구현
WebSocketHandler 주요 메소드
void afterConnectionEstablished(WebSocketSession session)
- 클라이언트와 연결이 완료되고, 통신할 준비가 되면 실행
void handlerMessage(WebSocketSession session, WebSocketMessage message)
- 클라이언트로부터 메세지가 도착하면 실행
void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus)
- 클라이언트와 연결이 종료되면 실행
void handleTransportError(WebSocketSession session, Throwable exception)
- 메세지 전송중 에러가 발생하면 실행
----------------------------------------------------------------------------
TextWebSocketHandler : WebSocketHandler 인터페이스를 상속받아 구현한 텍스트 메세지 전용 웹소켓 핸들러 클래스
handlerTextMessage(WebSocketSession session, TextMessage message)
- 클라이언트로부터 텍스트 메세지를 받았을때 실행