Clean Code that Works.

http://blog.springsource.org/2012/05/08/spring-mvc-3-2-preview-techniques-for-real-time-updates/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+SpringSourceTeamBlog+%28SpringSource+Team+Blog%29

Posted on May 8th, 2012 by Rossen Stoyanchev in Spring.


이전 포스트에서 new Servlet 3에 대해 소개 하면서 spring mvc 3.2 m1 에 보합된 긴~~ 요청에 대한 비동기 지원에 대해서 설명했다. 비동기 처리에 대한 두번째 매우 중요한 동기는 브라우저들은 실시간으로 요청에 대한 업데이트를 원한다는것이다. 예를 들어 채팅을 포함한 브라우저, 주가 지수, 상태 업데이트, 스포츠 생중계 등등. 모든 예들이 지연에 대해서 동일하게 민갑하지는 않지만 모든것들은 비슷한 요구가 있다.

HTTP request-response에 대한 표준으로는 브라우저가 요청을 시작하고 서버가 결과를 응답한다. 이 뜻은 서버는 브라우저로 부터 요청이 오면 새로운 전달 할 수 없다. 몇가지 방법들이 진화 하고 있는데 전통적인 polling 방식, long polling, HTTP streaming과 가장 최근에 나온 WebSocket protocol을 들 수 있다.

Traditional Polling

브라우저가 새로운 정보가 있는지 확인하고 서버는 매번 즉각적으로 응답한다. 예를들어 메일 클라이언트는 새로운 메세지를 10분마다 체크한다. 간단하고 동작하지만 새로운 정보는 가능한한 최대한 빨리 표시 되어야 하기 때문에 이 접근 방식은 비효율적인 방식이다. 

Long Polling

브라우저는 요청 정보를 유지하고 있지만 서버는 전송할수 있는 새로운 정보가 있을때까지 응답 하지 않는다. 클라이언트 관점에서 이것은 traditional polling과 같은 방식이다. 서버 관점에서는 long-running request와 매우 비슷하고 Part1에서 논의했던 기술을 가지고 확장할 수 있다.

응답에 대해서 얼마나 길게 대기할 수 있을까? 브라우저들은 5분정도 타임 아웃을 설정 하고 프록시들은 가능한한 빨리 끈어 버린다. 그래서 만약 새로운 정보가 도착하지 않는다면, long polling 요청은 브라우저에게 정기적으로 새 요청을 보낼 수 있도록 작성해야 한다.