Spring Web Socket

성기현·2024년 5월 22일

HTTP 통신은 기본으로 가져가면서 핸드셰이크를 통해서
WebSocket 으로 바꿔준다 그럼 이때는 클라이언트가 먼저 요청을 보내지 않아도 서버에서 실시간으로 알려준다.

ex) 비트코인 실시간 변동사항 고객한테 표로 알려주기


InterCeptor를 이용해 가로채서 사용자의 session을 전달해줌

  1. implements HandshakeInterCeptor 를 상속받는다

  2. 오버라이딩

  3. beforeHandShake 의 메서드에서 ServerRequest request 로 서버의 session 을 얻어 올수 있다

  4. 다운캐스팅을 해준다
    ServletServerHttpRequest servletRequest = (ServletServerHttpRequest)request;
    다운 캐스팅을 해야 session을 가져올수있다

그전에

if(request instanceof ServletServerHttpRequest)
로 request 가 ServletServerHttpRequest의 자식인지 확인하는 instanceof 를 쓴다

5.


  • 클래스 bean 등록되어있어야됨 @Component
  • return true 로 바꿔줌

웹소켓 동작시 수행할 구문

OOOWebsocketHandler 클래스 생성

  1. @Bean 등록

중복을 허용하지 않는 collection인 set 생성 제네릭은

WebSocketSession = 웹소캣 연결을 나타내는 객체
WebSocketSession = 서버 간 전이중 통신을 담당하는 객체

전에 만들었던 클래스에서 session을 가로채 websocketsession 에다가 넣어줌

여러 클라이언트가 동시에 연결될수도있고 동시에 종료할수도잇어서

데이터를 일관성있게 저장하려고 set 을 사용한것이다


void afterConnectionEstablished(WebSocketSession session)

  • 클라이언트와 연결이 완료되고, 통신할 준비가 되면 실행

void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus)

  • 클라이언트와 연결이 종료되면 실행

5.

message 의 내용을 log 로찍을거고


  1. 클라이언트 1, 2 , 3 , 4 번 유저들이 각각 보낸 메시지들을 서로 확인할 수 있게 할 것이다

이러면 모든 클라이언트들이 보낸 메시지들을 서로가 볼수 있게 설정


이제 이 두개를 어디서 적절히 이용하라는 설정용 클래스르 만들면 된다.


  • 어떤 interceptor 를 가지고 왔는지,웹소켓 동작 처리를 해줘야 하는지 알아야되니까 의존성주입 DI 해준다

2.


의존성 주입한 것을 각각 .add로 추가

.addHandler의 주소는 자바스크립트에서 처리 함


이걸 가지고

마지막엔 내 컴퓨터 ip 를 적는다


만약에 나중에 프로젝트를 끝내고 배포를 할때 배포주소가

http://board.com 이면 이거도 넣어줘야된다

이렇게 하면 서버는 처리 완료


main.html 에다가

websocket.js 연결하고

라이브러리도 추가해줘야된다 라이브러리는 공통된 common.html 이나 footer.html 에 작성

0개의 댓글