[비동기 웹 커뮤니케이션 기술]
- Ajax (Asynchronous JavaScript and XML) : client-server간 asynchronous web application을 만들기 위한 방법으로 웹페이지의 조작, 변동 없이 background에서 asynchronous하게 server로 부터 data를 받아 오는 것. : 일반적으로 data 수신을 위해서는 지속적인 polling을 사용 함.
- Comet : server에서 client(browser)로 data를 전달 시 long-held HTTP request를 사용할 수 있도록 한 web application model. : Client의 request에 대한 response를 바로 전달하지 않고 holding 하였다가 event가 발생한 시점에 client로 전달 함.
- HTML5 Websocket : single TCP connection(by socket) 상에서 full-duplex communication channel을 제공하는 web technology.
: 현재 대부분의 desktop browser가 지원하나 Android web browser는 지원하지 않음.
출처 : Wikipedia
: 현재 대부분의 desktop browser가 지원하나 Android web browser는 지원하지 않음.
출처 : Wikipedia
- http://www.infoq.com/news/2008/12/websockets-vs-comet-ajax- http://en.wikipedia.org/wiki/Comet_(programming)
(위 link 내용을 바탕으로 정리)
[관련 기술]
: Hidden iFrame . Dynamic Web application 을 위한 기본적인 기술. 장점으로는 모든 브라우저에서 동작한다는 점이고 단점으로는 reliable한 error handling 방법의 부족과 request 전달 상태 확인 불가. . 1996년 MS Exchange 팀에서 메일 시스템 구축 시 Outlook-like한 front end을 만들기 위해서 사용했음.
: XMLHTTP . 1998년 MS Exchange Server 2000의 web front end를 개발을 위해 single web page에서 server와 asynchronous communication을 할 수 있는 XMLHTTP 개발 . 추후 XMLHTTP는 IE5 의 MSXML library feature로 추가됨.
: XMLHttpRequest (XHR) . 1995년 Netscape Navigator에서 server에서 browser로 새로운 이미지, HTML page를 HTTP multipart response로 전달하기 위해 "server push"라는 이름의 feature 개발 . 2002년 이후 Gecko-based browser들(예, Firefox)에 해당 feature가 적용되어 streaming Comet transport로 사용될 수 있었음. : 2005년 JavaScript와 XHR 기반의 Google Maps, Google Blog 서비스 시작됨. . Web browser-server간 communication을 위한 Ajax application 개발 및 server-browser 간 Comet messaging 서비스에서 주로 사용됨. . Server side에서는 각 event를 각 multipart response로 보낼 수 있고 client side에서는 XHR의 onreadystatechange를 통해서 event를 수신 받을 수 있음. => Multipart response와 browser에서 event 처리로 custom data format의 전달 및 new data를 browser의 JavaScript를 통해서 처리할 수 있게 됨.
* [참고] HTTP Multipart response :
- http://www.ietf.org/rfc/rfc1521.txt (Section 7.2)
- http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html
- http://www.ietf.org/rfc/rfc1521.txt (Section 7.2)
- http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html
: Ajax with long polling . server와의 communication을 대다수의 XHR을 지원하는 browser에서 동작하게 하기 위해 long polling 방식을 주로 사용. . long polling은 browser에서 Ajax style request를 server로 전달하여 새로운 data가 발생되기 전까지 response를 keep 시키는 것임.
+ XMLHttpRequest long polling . 일반적으로 XHR을 지원할 경우 XHR 기반 long polling을 지원한다. . browser에서는 encoded data(XML, JSON), java script을 포함한 request를 Server로 보내고 event 발생 시 server에서 response를 받는다. . browser에서 response를 받을 때 다음 event를 받기 위해 다시 server로 request 전달 함.
+ Script tag long polling . Cross-Domain(Site) Scripting 관련 방법 . XHR의 보안상 이유로 JavaScript를 가져온 서버 하고 만 통신 가능 (preventing the cross-site scripting attacks) . main web page를 제공하는 server와 Comet server가 다른 SLD에서 제공되는 형태일 경우 Comet script를 바로 실행 할 수 없고 URI 형태로 Comet script를 실행하여 처리하는 방법을 말함. . 근데 잘 모르겠다..
[Comet]
Comet is a web application model in which a long-held HTTP request allows a web server to push data to a browser, without the browser explicitly requesting it.
All these methods rely on features included by default in browsers, such as JavaScript, rather than on non-default plugins. The Comet approach differs from the original model of the web, in which a browser requests a complete web page at a time.
|
[Comet 강좌 with ASP.NET]
[WebSocket]
- WebSocket 소개
* 말그대로 web browser, server간에서 socket을 사용하는 방법
browser<->server간 동작을 위해 asynchronous socket operation을 지원해야 겠지..
뭐 요즘은 native programming에서도 asynchronous socket을 사용해서 프로그래밍하니..
- WebSocket 지원 현황
* 현재 Android browse는 web socket을 지원하지 않는다.
* 그외 대다수의 Browser(IE10, FF 20, Chrome 26, Safari, Opera)들에서 지원 중
- WebSocket과 Socket.io( Node.js 모듈)
[Comet, WebSocket 지원 현황]
* 2012년 4월 자료이긴 하지만 참고..
(LP: long-Polling HS: Http Streaming)
Server | Version | Native Comet | Native WebSocket | WebSockets | LP | HS | JSONP |
Netty | 3.3.x | X | X | X | X | X | X |
Jetty | 5.x | X | X | X | |||
Jetty | 6.x | X | X | X | X | ||
Jetty | 7.x | X | X | X | X | X | X |
Jetty | 8.x | X | X | X | X | X | X |
GlassFish | 2.x | X | X | X | X | ||
GlassFish | 3.x to 3.1.1 | X | X | X | X | ||
GlassFish | 3.1.2 | X | X | X | X | X | X |
Tomcat | 5.x | X | X | X | |||
Tomcat | 6.x | X | X | X | X | ||
Tomcat | 7.0.26 and lower | X | X | X | X | ||
Tomcat | 7.0.27 and up | X | X | X | X | X | X |
JBoss | 5.x | X | X | X | |||
JBoss | 6.x | X | X | X | X | ||
JBoss | 7.x | X | X | X | X | ||
WebLogic | 10.x | X | X | X | X | ||
WebLogic | 11.x and up | X | X | X | X | ||
Resin | 2.x | X | X | X | |||
Resin | 3.x | X | X | X | X | X | |
WebSphere | 7.x | X | X | X | |||
WebSphere | 8.x | X | X | X |
Supported Browsers
The current list of Browsers have been tested with Atmosphere using the atmosphere.js Javascript library and the transport they supports.
Browser | Version | WebSockets | Long-Polling | Http Streaming | JSONP |
Firefox | 3.x to 8.x | X | X | X | |
Firefox | 9.x to 11.x | X | X | X | X |
Chrome | 12.x and lower | X | X | X | |
Chrome | 13.x and higher | X | X | X | X |
Internet Explorer | 6x to 9.x | X | X | X | |
Internet Explorer | 10.x | X | X | X | X |
Opera | 10.x and lower | X | X | ||
Opera | 11.x | X | X | X | |
Safari | 4.x | X | X | X | |
Safari | 5.x | X | X | X | X |
Android | 2.x and up | X | X | X | |
Safari (iOS) | 1.x to 4.x | X | X | X | |
Safari (iOS) | 5.x | X | X | X | X |
[Comet, WebSocket solutions]
- 지원 solution list
- CometD
- Atmosphere