본문 바로가기

프로그래밍/network

"Long Polling"과 스트리밍이 뭐지?

http://helloworld.naver.com/helloworld/textyle/1052


 HTTP 연결의 경우 매번 Handshaking 과정을 거치기 때문에 자주 서버와의 통신이 필요한 경우는 비효율적이므로, Polling 방식 대신에 아래와 같은 Long Polling 및 스트리밍이 나옴


 Comet Servlet을 통해 Socket Client 가 떠 있는 상태에서 서버에서 해당 Socket Connection을 일정 시간 유지해 주면서 이벤트 발생 시에 Subscribe 되어 있는 Socket Clietn 에게로 Publish 하는 모델이며, 이러한 Socket Client 가 브라우저 뿐만 아니라 모바일에서도 다 사용가능하다고 함.


 특히 스트리밍 방식은 연결을 맺고 있는 상황에서는 언제든지 계속 이벤트를 전송할 수 있으므로, 이벤트가 빈번하고, 실시간 메시지 전달이 필요한 경우에 사용하는 것이 좋다고 한다.


 Comet 서블릿은 Apache Tomcat 의 Advanced IO에 포함되어 있으며, 기본적으로 Long Polling 및 스트리밍을 지원한다.


참고로, 자바스크립트의 보안은 압축 및 난독화 이외에 특별한 것이 없고, 대부분 서버에서 처리할 수 있도록 구현하는 것이 최선이라고 한다.


스트리밍 서비스의 경우 너무 잦은 전송은 비효율적이므로, 연결을 맺을 때에 최소전송 길이와 같은 변수를 사용하여 그 이상 길이가 발생했을 때에 전송하는 팁도 있다.


몽고디비의 경우에도 롱 폴링으로 테일러블 커서를 유지하고 있다고 되어있으나, 궁금한 것은 1시간 타임아웃 시점에 요청을 하게되는 경우 실패하게 될 것 같았다. 사실 그 궁금증 때문에 롱 폴링을 찾아보게 된 사실을 이제 깨달음.


이와 같은 경우 서버 단에서 전송 실패한 메시지를 오류 큐에 담았다가, 추후에 다시 재전송하는 것으로 구현했다고 함.