BLOG main image
상속이 과연 좋기만 한 것일까요?

그 뻔한 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에 대해 할 얘기가 더있긴하지만. 이거보다 더 길어지면 아무도 안읽을것같아 이만 씁니다..


Posted by 망구
◀ PREV : [1] : ... [10] : [11] : [12] : [13] : [14] : [15] : [16] : [17] : [18] : ... [102] : NEXT ▶

카테고리

분류 전체보기 (102)
Flex / ActionScript (13)
MFC / C++ / WINAPI (5)
OS / 자료구조 / System (2)
영상처리 (1)
3D Game Programming (8)
AVR / 임베디드 / 하드웨어 (2)
웹 프로그래밍 (41)
JAVA (1)
디자인 (1)
기타 학문 (0)
사는 이야기 / 잡담 (7)
영어공부 (5)
아이팟/아이폰 개발 (1)

최근에 받은 트랙백

태그목록

달력

«   2012/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31