comet 이란?
-
만들어진 계기 : 실시간(real-time) 웹에 대한 욕구
HTTP는 특성상 실시간성을 위한 지속적인 연결을 가질 수 없다.
클라이언트가 서버에 특정 요청을 하면 서버가 응답해준 후 연결이 끊어져버리기 때문!
-
comet은 이를 해결하기 위해 등장한 기술들을 지칭하는 용어!
-
사실 응답 후 연결을 끊는 HTTP를 이용하기 때문에 완벽하게 실시간으로 작동하는 건 아니다. 짧은 시간 간격으로 웹 페이지를 업데이트 하는 것에 불과하지만, 그 시간 간격이 굉장히 짧기 때문에 실제 서비스에는 불편함이 없다!
-
Reverse AJAX, AJAX push, Two-Way-Web, HTTP Streaming 등으로 불린다.
-
핵심적인 목적은 서버와 지속적으로 연결하는 것이다.
-
Polling (AJAX Polling)
AJAX로 상태를 가져와 화면을 업데이트하는 자바스크립트 함수를 작성하고, 일정 시간마다 호출한다. 간단함!
-
forever <iframe>
서버가 클라이언트의 요청에 응답할 때, Content-Length 헤더를 출력하지 않으면 클라이언트는 서버측으로부터 접속이 종료될 때까지 계쏙 데이터를 받아들인다고 함.
이러한 특징을 이용해서 서버 측에서 접속을 끊지 않고 계속 유지하도록 만든다.
숨겨진 <iframe>에서 긴 시간 동안 서버 푸시를 할 수 있게 된다!
- 장점
- 폭넓은 호환성 : 오래된 브라우저에서도 <iframe> 태그는 지원해 준다.
- 단점
- 에러를 제대로 다룰 수 없고, HTTP의 상태를 다룰 수 없다.
- 모바일 브라우저에서는 사용할 수 없다.
- Same-Origin Policy의 영향을 받아 도메인이나 스키마, 포트가 다른 문서간에는 사용할 수 없다.
- 장점
-
long-polling
서버 측에서 응답할 주소를 입력하고, 서버 측에서는 응답할 내용이 있을 때까지 해당 접속을 계속 유지한다.
접속을 유지하다 응답할 내용이 발생하면 콜백 함수를 통해 데이터를 전송하고 HTTP 트랜잭션을 마친다.
클라이언트는 받은 데이터를 처리한 후 다시 서버에 접속한다. 이를 반복함!
이벤트가 발생하면 바로 응답이 이루어지기 때문에 실시간ㅅ넝이 아주 좋다!
-
Streaming
클라이언트와 서버가 계속 접속을 유지한 채로 있는다.
이벤트가 발생할 때마다 클라이언트로 데이터를 보낸다.
-