[Socket.io] Polling

Hyun·2023년 8월 31일
0

nodejs

목록 보기
17/19
post-thumbnail

1. Polling이란?

  • 클라이언트가 일정한 간격으로 서버에 요청을 보내서 결과를 전달받는 방식
const POLL_TIME = 1000
setInterval(()=>{
	fetch('url~')
  },POLL_TIME)
  • 이 방법은 구현이 쉽다는 장점이 있지만, 서버의 상태가 변하지 않을 때도 계속 요청을 보내서 받아오기에 필요 없는 요청이 많아지며, 또한 요청 간격을 정하기도 쉽지 않다.
  • 1) 폴링의 주기가 짧으면 서버의 성능에 부담
    2) 주기가 길면 실시간성이 좋지 않음
    3) 서버에서 바뀐 데이터가 없어도 계속 요청을 해야하고 결과를 줘야 함

2. Long Polling이란?

  • Polling의 단점으로 인해 새롭게 고안해 낸 것이 Long Polling
  • 롱 폴링도 폴링처럼 계속 요청을 보내지만 일반 폴링은 주기적으로 요청을 보낸다면 롱폴링은 요청을 보내면 서버가 대기하고 있다가 이벤트가 발생했거나 타임아웃이 발생할 때까지 기다린 후 응답을 주고 클라이언트는 응답을 받자마자 다시 요청을 보내게 됨
  • 1) 서버의 상태 변화가 많이 없다면 폴링 방식보다 서버의 부담이 줄어듬
    2) 이러한 특징으로 롱 폴링은 실시간 메시지 전달이 중요하지만, 서버의 상태 변화가 자주 발생하지 않는 서비스에 적합

3. Streaming이란?

  • 클라이언트에서 서버에 요청을 보내고 끊기지 않는 연결상태에서 계속 데이터 수신
  • 양방향 소통보다는 서버에서 계속 요청을 받는 것에 더 유용하다.
  • Polling, Long Polling, HTTP Streaming 이 세가지의 공통점은 결국 HTTP 프로토콜을 이용하며 이 HTTP 요청과 응답에 Header가 같이 전달되는데 이 Header에 많은 데이터가 들어있어서 너무 많은 요청과 교환은 부담을 주게 된다.

4. Http 통신 방법과 WebSocket의 차이점

  • WebSocket은 HandShake를 위해서만 HTTP를 이용하고 그 이후부터는 독립적인 프로토콜 ws를 사용
  • 또한, HTTP 요청은 응답이 온 후 연결이 끊기게 되지만 WebSocket은 HandShake가 완료되고 임의로 연결을 끊기 전까지는 계속 연결이 되어있다.

5. 결론

  • Polling과 LongPolling으로도 채팅 같은 실시간 앱을 구현할 수도 있지만, 결국은 클라이언트가 서버에 요청을 보내서 응답을 받는 단방향 통신이기 때문에 Polling과 LongPolling보다 효율적인 양방향 통신을 할 수 있는 WebSocket를 사용하자

0개의 댓글