이 전에 모의면접으로 튜터님과 현재 진행하고 있는 웹소켓에 대해서 얘기가 나왔는데
broadcast 와 handshake에 대해서 얘기가 나왔는데 잘 몰라서
구글링을 해봤는데 명쾌한 글들이 없었다.
내가 이걸 사용을 안했다면 웹 소켓을 사용한게 아닌걸까 라는 생각이 들었었다.
반나절동안 열심히 이것저것 찾아보다가 질문을 드렸다.
처음엔 handshake는 join 메소드를 쓰면서 사용했을 수도 있다고 하셨으나 join이 없었고
http에서는 아래의 이유 때문에 다른 설정을 안해도 실행이 되는게 아닐까 라는 생각이 들었다.
기존의 다른 TCP 기반의 프로토콜과 다르게,
WebSocket은 HTTP 요청 기반으로 Handshake 과정을 거쳐 커넥션을 생성한다.
덕분에, 초기 WebSocket Handshake 요청은 추가적인 방화벽 설정없이
80, 443 포트를 사용하여 양방향 통신이 가능하다.
출처 : [ WebSocket ]
handshake : 소켓 연결 시 클라이언트가 서로 연결될 때 적용되어야 하는 것
broadcast : 내용을 emit할 때 어느 부분까지 가는지 정해주는 것 (broadcast - 전체, multicast - 일부 그룹)
정리하면 소켓에서는 클라이언트와 서버는 서로 정보를 주고 받고
내 코드에서는 @ServerEndpoint 가 handshake 역할을 해준다
boradcast는 송신 호스트가 전송한 데이터가 네트워크에 연결된 호스트 몇 명까지인지 정하는 것이다.
다시 웹소켓 코드로 돌아가서 해결 못한 부분을 고치려고 하는데
나가기만 하면 WebSocket is already in CLOSING or CLOSED state 에러가 뜨고
위 에러를 해결하는 방법을 구글링해서 코드를 적으면
Uncaught DOMException: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state
에러가 뜬다.
사용자 접속 자 수를 js에서 띄우기 위해 contorller에서 보냈는데
Unknown return value type: java.lang.Integer 에러가 떠서
@ResponseBody를 추가해 에러가 뜨지 않았다.
웹소켓 에러를 해결하려고 하루종일 이것저것 보면서 삽질을 해봤는데
아직까지 모르겠다. 머리 깨질 것 같다 😭
'TIL' 카테고리의 다른 글
217일차(모험 126일차) - 다양한 의존관계 주입 방법 (0) | 2022.04.19 |
---|---|
216일차(모험 125일차) - 오류 (0) | 2022.04.18 |
212일차(모험 121일차) (0) | 2022.04.14 |
211일차(모험 120일차) - 코드 살펴보기 (0) | 2022.04.13 |
210일차(모험 119일차) - 프로젝트 오류 해결하기 (0) | 2022.04.12 |