폴링
리얼타임 웹을 위한 기법으로 일정한 주기(특정한 시간)를 가지고 서버와 응답을 주고받는 방식이 폴링 방식이다.
ex) 실시간으로 변하는 야구중계 같은 데이터가 있다면 브라우저에서 5초 단위로 서버에 요청을 보내 업데이트하는 방식(네이버 실시간 문자중계 같은거?)
- 만약 정보가 변하지 않으면 리소스를 낭비하고 오버헤드/트래픽이 발생한다.
- Ajax Polling이라고도 불리는데 주로 Ajax호출을 사용하기 때문이다.
- 또한 서버에서 데이터가 오지 않았는데 추가적으로 여러번 요청이 오게 되면 이전 데이터는 쓸모 없는 데이터가 되버린다. setTimeout같은 타이머를 이용해서 일정한 시간 간격으로 XMLHttpRequest를 보내 구현한다.
- 하지만 이 폴링기법은 두 가지 문제가 있는데, 폴링 주기에 관한 문제로 주기가 짧으면 서버의 성능에 부담이 가고, 죽기가 길면 실시간 성능이 약간 떨어지는 문제가 있다.
해결법
1) comet을 구현하는 방법
1-1) 롱폴링기법
서버 측에서 접속을 열어두는 시간을 길게하는 방식.
이벤트가 발생(변경된 데이터가 있을 때만 응답)하면 바로 응답이 이루어지기 때문에 실시간성이 아주 높으며,스트리밍방식과 달리 웹브라우저 환경에 관계없이 사용할 수 있기 때문에 흔히 사용하는 방식
ex) 브라우저가 서버로 요청을 보내면 서버는 요청한 데이터가 변경되었을때만 응답을 보낸다.
Transfer-Encoding : chunked 같은 응답을 반환해서 커넥션을 유지하여 동작한다.
만약 커넥션이 끊겼다면 클라이언트는 다시 서버에 연결을 요청한다.
이러한 방식은 실시간으로 응답받는 경우에 적당하고 서버의 부하도 줄여주지만 데이터가 자주 바뀌는 경우(대용량 채팅)에는 한명의 유저가 채팅을 입력할 경우 엄청난 수의 변경 호출이 일어나서 적합하지 않습니다. 또한 폴링과 롱폴링 모두 오랫동안 연결되어 있는 커넥션을 최적화 하지 못하는 문제가 있다. 이 방식을 위해서는 연결된 커넥션과 요청 리스트들을가지고 있어야 한다.
1-2) 스트리밍 방식
하나의 웹 요청에 대해 웹 접속을 계속 열어두고, 새로 이벤트가 발생하면
발생할 때마다 부분적인 응답으로 브라우저로 보내는 방식
도움이 되셨다면 하트 및 댓글 부탁드립니다♥
댓글