hmk run dev

polling, websocket, sse 서버의 event를 클라이언트로 보내는 방법 본문

카테고리 없음

polling, websocket, sse 서버의 event를 클라이언트로 보내는 방법

hmk run dev 2024. 3. 17. 22:17


polling

  • 클라이언트가 평범한 http request를 서버로 계속 날려서 이벤트 내용을 전달받는 방식이다.
  • 가장 쉬운방법이지만 클라이언트가 계속적으로 request를 날리기때문에 클라이언가 많아지면 서버의 부담이 급증하게 된다. http request connection을 맺고 끊는것 자체가 부담이 많은 방식이다. 그리고 클라이언트에서 실시간정도의 빠른 응답을 기대하기도 어렵다.
  • polling은 http 오버헤드가 발생한다는 단점이 있다.
  • 하지만 일정하게 갱신되는 서버 데이터의 경우 유용하게 사용할 수 있는 방식이다. (ex. 대시보드 갱신)

 

 

SocketSSE(Server-Sent-Event)

  Socket SSE
브라우저 지원 대부분 브라우저에서 지원 대부분 모던 브라우저 지원(polyfills 가능)
통신 방향 양방향 일방향(서버에서 클라이언트로)
리얼타임 Yes Yes
데이터 형태 Binary, UTF-8 UTF-8
자동 재접속 No Yes(3초마다 제시도)
최대 동시 접속 수 브라우저 연결 한도는 없지만 서버 셋업에 따라 다름 HTTP를 통해서 할 때는 브라우저당 6개 까지 가능 / HTTP2로는 100개가 기본
프로토콜 websocket HTTP
베터리 소모량 작음
Firewall 친화적 Nope Yes

 

websocket

  • 양방향 채널을 이용해 채팅방 처럼 양방향 통신이 가능하다.
  • 기존 http요청 응답 방식은 요청한 그 클라이언트에만 응답이 가능했는데, ws 프로토콜을 통해 웹소켓 포트에 접속해 있는 모든 클라이언트에게 이벤트 방식으로 응답한다
  • 최초 접속이 일반 http request를 통해 handshaking과정을 통해 이루어 지기 떄문에, 기존의 80, 443 포트로 접속을 하므로 추가로 방화벽을 열지 않고도 양방향 통신이 가능하고, http 규격인 CORS적용이나 인증등의 과정을 기존과 동일하게 가저갈 수 있는것이 장점이다.
  • 단, websocket 프로토콜을 처리하기 위해 전이중 연결과 새로운 웹소켓 서버가 필요하다.

 

 

SSE (Server-Sent Events)

  • HTML5 표준안이며 어느정도 웹소켓의 역할을 하면서 더 가볍다.
  • websocket 과 같이 양방향이 아닌 server -> client 단방향이기에 서버의 event 나 message를 client 로 push 하는 작업에 유용하게 사용될 수 있다.
  • 양방향이 아니기에 요청 시 ajax로 쉽게 이용할 수 있다.
  • 재접속 처리 같은 대부분의 저수준 처리가 자동으로 지원된다.
  • IE는 기본 미지원이지만, polyfill을 이용할 경우 IE를 포함한 크로스브라우징이 가능하다.

 

Comments