CS
[네트워크] 실시간 웹(real-time web)과 웹소켓(web socket)
그레고리력
2021. 6. 30. 19:41
Real-time Web 이란?
- 인터넷에서 창작자가 정보를 만들어내는 즉시 수신할 수 있도록 하는 기술
- Server Push: 서버가 클라이언트(브라우저)로 능동적으로 데이터를 전송해 주는 통신 방식
웹소켓이란?
- 두 프로그램간 메시지를 교환하기 위한 통신 방법 중 하나
과정
- handshaking(https, http) → 프로토콜이 ws로 변경(데이터 전송)
- 별도의 포트는 없으며 기존 포트(80, 443) 사용
- frame으로 구성된 메시지라는 논리적 단위로 통신, 메시지는 텍스트와 바이너리만 가능
특징
- 양방향 통신 :데이터 송수신을 동시에 처리, 클라이언트와 서버가 원할 때 데이터를 주고받을 수 있음(http는 단방향)
- 실시간 네크워킹, 연속된 데이터를 빠르게 노출(채팅, 주식, 비디오 등)
- 문자열을 주고받기 때문에 해석은 어플리케이션의 몫, 형식이 정해져있지 않아 해석하기가 쉽지 않음
참고
Polling
- 서버로 일정 주기 요청 송신
- 서버는 적절한 데이터가 없는 경우 빈 데이터를 보내거나 실패 응답 등을 함
- 언제 통신이 발생할지 예측이 어려워 일정 주기로 계속 요청을 보내는 것으로 불필요한 요청과 연결 생성(리소스 낭비 혹은 실시간성이 떨어짐)
- 요청 사이에 이벤트가 발생해도 다음 요청이 발생하기 전까지 응답하지 않음, 서버이벤트가 일정한 주기로 발생하면 효율적인 사용 가능
long polling
- 서버 이벤트가 발생할때 혹은 타임아웃까지 응답을 미루는 방법
- 서버 이벤트가 빈번하게 발생하면 폴링보다 빈번하게 요청
SSE(sever sent events), aka http streaming
- HTTP를 사용하여 서버푸시 구현
- 서버에 요청을 보내고 끊기지 않은 연결상태에서 끊임없이 데이터 수신
- but 클라이언트에서 서버로의 데이터 송신이 어려움
- http를 통해 통신에 request, response 둘 다 헤더가 불필요하게 큼
- 실시간성이 높고 기존 개발 방식과 비슷, 연결이 끊어지면 자동 재접속 처리