[Ajax] Ajax Push / Commet 에 대한 쉬운설명

그 뻔한 polling 을 쓴다면 굳이 comet 이라는 패러다임이 등장하지도 않았겠죠..
작년에 제가 comet에 관해 좀 공부를 했었는데 기억을 되살려서 얘기좀 해볼까합니다..

comet은 event-driven 방식입니다.. 이게 뭔소린가하면..
최초에 클라이언트는 서버에 request 를 합니다. 하지만 서버는 절대 바로 response 하지 않습니다.
" 서버에서 이벤트가 발생했을때" response 를 합니다.. 즉 클라이언트(브라우져)는 마냥 응답을 계속 기다리고 있다가 특정 시점(서버에서 이벤트가 발생한시점)에 실제로 "HTTP  1.1 200 OK ......header....data"  같은 응답을 받게되는 것이죠.
클라이언트는 서버로부터 응답을 받은 즉시 또 request를 날립니다. 서버에서의 이벤트 발생을 지속적으로 listening 하기 위해서죠. 간략하게 설명하자면 이렇습니다..

1. 최초에 클라이언트는 서버에 요청을 날린다.
2. 서버는 바로 응답하지않고 서버에서 이벤트가 발생했을때 응답을 한다.
3. 응답받은 클라이언트는 또 request를 날린다.
4. 서버는 바로 응답하지않고 서버에서 이벤트가 발생했을때 응답을 한다.

바로 이 과정들이 계속 반복되는것입니다.
멋지지 않나요? 전 첨에 이걸 보고 정말 감탄을 했습니다.. polling 방식보다 훨씬 효율적인 방법인거죠...
예를 좀 들어볼께요.

주식의 가격을 알려주는 서버가 있다고 가정해보죠. 클라이언트는(브라우져) A 라는 종목의 현재가가 바뀔때마다 HTML 페이지를 갱신해 줘야합니다. 그런데 다들 아시겠지만, 주식에서 현재가 라는것이 주기적으로 변하는게 아니죠.
1시간동안 가격이 똑같을 수도있고 1분만에 가격이 상승할수도, 하락할수도 있는것입니다.
그런데 이경우에 polling 을 사용하게되면 특정 틱 (예를들어 3초) 마다 서버와 request - response 를 해야하기때문에
서버에 걸리는 부하가 무지 크겠죠.. 게다가 클라이언트가 여러명이라면 서버는 그야말로 죽어나겠죠....
이렇게 갱신 주기를 알 수 없는 값을 원할때 event-driven 방식의 comet server가 필요한것입니다..
이 경우에서는 "현재가가 변하는 시점" 에서만 서버가 response 를 하겠죠. 클라이언트는 응답을 받은 그 시점에 HTML 페이지를 갱신하게되는것입니다.
즉 "실제 데이타가 변경되었을때만 갱신" 이라는. 어찌보면 http 에서는 꿈만 같았던 패러다임이 구현되는 것이지요.

이러한 event-driven 방식을 구현한 서버들을 Comet-Server 라고 합니다.  j2ee 진영에 구현한 서버가 몇개 있더군요. 실제로 제가 웹채팅 어플리케이션 만들때 사용하기도 했습니다.
글이 무지 길어졌군요. comet에 대해 할 얘기가 더있긴하지만. 이거보다 더 길어지면 아무도 안읽을것같아 이만 씁니다..

출처 : http://boast.tistory.com/133



요약하자면,

1.     전체적인 개념은 Server 측에서 client쪽으로 push 하는 것,

2.     그러나 기술 내용은 HTTP request response 방식을 응용,

3.     Client에서 server측으로 해당 서비스에 대해 request 전달 후 Event driven 방식에 의거 response 올 때까지 multi job 수행.

4.     server에서는 client로부터 request 받은 후, 대기하고 필요시 response 전달.

5.     response받은 즉시, request 요청.

'기술참고자료 > Javascript' 카테고리의 다른 글

[Ajax] Ajax와 Reverse Ajax  (0) 2011.05.06