웹소켓
: 두 프로그램 간의 메시지를 교환하는 통신 방법
1. 개념
- 현재 인터넷 환경(HTML5)에서 많이 사용되고 있다.
2. 특징
- 양방향 통신
- 데이터 송수신을 동시에 처리가능
- 클라이언트와 서버가 서로가 원할 때 데이터 교환
- 통상적인 Http 통신: 단방향(client의 요청)
- 실시간 네트워킹에 유용
- 웹 환경에 빠르게 데이터를 계속해서 갱신해야하는 경우
- 여러 단말기에 빠르게 데이터 교환
3. 이전의 통신
- Polling
- 서버에 일정 주기마다 요청 송신
- 언제 통신이 발생할지 예측이 불가능해서 계속 요청을 보내는 것
- Long polling
- 요청 후에 응답을 받을 때까지 연결 종료 x
- 많은 양의 데이터를 다룰 때는 polling과 비슷한 성능
- streaming
- 서버에 요청을 보내고 연결을 유지하면서 데이터 수신을 함
- 단점: 클라이언트에서 서버로 데이터 송신이 어려워짐
결론:
모든 방법이 HTTP를 통해 통신을 함
⇒ Request, Response 모두 Header가 불필요가 커짐
4. 동작 방법
- 핸드 쉐이킹
- HTTP의 헤더로 서로간의 연결을 보장
- 프로토콜이 WS(또는 WSS)로 변경됨
- 단위는 messge, frame이 모여 구성됨
- frame: 작은 헤더를 갖고 있음
- 원하는 데이터를 송수신
- 송수신이 완료되면 연결을 종료
5. 특징
- 최초 접속할 때에만 Http 프로토콜 사용
- http header을 이용해서 handshaking 시작
- 웹소켓을 위한 별도의 포트는 없고, 기존 포트 사용(http-80, https-443)
- 프레임으로 구성된 메시지라는 논리적 단위로 송수신
- 메시지에 포함될 수 있는 교환 가능한 메시지는 텍스트와 binary
6. 한계
- HTML5 이전의 기술로 구현된 서비스에서는?
- Socket.io, SockJS 를 사용해서 소켓처럼 구현가능하게 도움
- 브라우저와 웹 서버의 종류와 버전을 파악 → 가장 적절한 기술로 소켓처럼 구현
- 문자열을 주고 받을 뿐 그 이상의 기능은 없음
- STOMP
- 채팅 통신을 하기 위한 형식을 정의
- HTTP처럼 해석하기 편한 프로토콜
- 일반적으로 웹소켓 위에서 사용됨