본문 바로가기

IT/Spring

Spring webSoket의 이해 - 기본 개념을 따라서

WebSocketHandler의 기본적인 기능을 간단하게 커스텀 해본 코드

/* 웹 소켓 활성화 session 관리 */
	private final List<WebSocketSession> sessionList = new ArrayList<WebSocketSession>();
	/** WebSocket 연결 성공 시 사용할 준비가 완료 될 때 호출 될 메소드 
	 *  @param WebSocketSession
	 * */
	@Override
	public void afterConnectionEstablished(WebSocketSession session) throws Exception {
		log.info("{} 연결 활성화", session.getId());
		sessionList.add(session);
		log.info("{} 웹 소켓 session 생성 완료", session);
	}
	/** 새로운 WebSocket 메시지가 도착했을 때 호출, 
	 *  수식 된 메세지 처리 및 응답 생성, 
	 *  ex) 특정 메시지 유형 파싱 -> 그에 대한 응답 생성
	 *  @param WebSocketSession ㅡ WebSocketMessage
	 * */
	@Override
	public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
		// TODO Auto-generated method stub
		String payload = message.getPayload().toString();
		log.info("## payload 정보  == {}", payload);
		log.info("## message Type == {}", message.getClass());
		
		for(WebSocketSession sesion : sessionList) {
			log.info("## 전송 되는 Session 정보 =={}", session.getId());
			log.info("## 전송 되는 message 정보 == {}", message);
			session.sendMessage(message);
		}
	}
	/** 웹소켓 오류 처리 
	 * 연결이 유실 or 오류 발생 시 대처 방법
	 * */
	@Override
	public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
		// TODO Auto-generated method stub
	}
	/**연결 종료 이후 호출 
	 * 정리 작업 등 
	 * DB 저장에 사용을 하거나, 저장 처리 하면 될 것 같다 
	 * */
	@Override
	public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
		 log.info("{} 웹소켓 해제", session);
	     sessionList.remove(session);
	}
	/**
	 * 이 메소드는 WebSocketHandler가 부분 메세지를 처리하느지에 대한 여부 
	 * 부분 메세지 처리시 True , 아닐 경우 False 
	 *  실시간 구현이라면 True가 적절해 보임
	 *  
	 * */
	@Override
	public boolean supportsPartialMessages() {
		boolean ck =true;
		return ck;
	}

 

 

이 상태로 서버를 실행하려니까, WebSocketHandler에 이상이 있다고 뜬다

WebSocketConfig 파일을 살펴보자 

 

#WebSocketConfig 파일이다. 

이 부분에서 WebSocketHandler를 참조하는데 webSocketHandler가 addHandler 메소드를 실행하며, error가 생긴 걸로 보인다. 

하지만 WebSocketHandler를 상속받는  CustomWebSocketHandler를 만들어두어서 괜찮다고 생각했는데,

해당 파일의 webSocketHandler를 커스텀 생성자를 이용해 주입해본다.

생성자를이렇ㅇ게 바꾸니 서버 실행 됌!

 

 

서버 실행이 되고 해당 url 로 접근해보니 웬걸,,

이렇게 뜬다,, 나참,,

그리고 뜬 error message

이번엔 DefulatHandShakeHandler에서 에러가 뜬다,, ㅜ

 

여기서 부터는 구조적 정리가 병행 되어야 할 것 같다... 내일은 webSocket 구조정리로 찾아뵙겠습니다.!

반응형

'IT > Spring' 카테고리의 다른 글

Spring webSoket- 기본 개념을 따라서(2)  (0) 2024.05.04