폴링과 콜백
일반적으로 상태를 알아오기 위한 방법에는 크게 두가지 방법이 있다.
하나는 상태를 주기적으로 조사를 해서 알아오는 것이고, 다른 하나는 상태를 알고 있는 주체(리스너)에게 알려 달라고 이야기(등록) 한 후 리스너가 알려주는 방식이다.
전자를 폴링(polling)이라고 하고 후자를 콜백(call-back)방식이라고 한다. 또한 후자를 비동기(asynchonous)적인 방법이라고 한다. 인터넷 분야에서는 전자를 pull technology, 후자를 Push technology라고 하기도 하는 것 같다.(서버관점에서)
폴링의 경우에는 궁금한 놈이 바쁘게 일하는 방식이다. 문제는 일을 계속해야 한다는 점이다. 근데 일을 하는 것 자체가 부하가 된다.
실생활의 예를 들어보자.
집에 중요한 택배를 시켜놓고 왔다. 다행히 집에 어머니가 계셔 전화로 물어보니 아직 안왔다고 한다.
폴링의 경우라면 1시간 마다 집에 전화를 걸어 택배가 왔는지 물어보는 방법을 취할 수 있겠다. 엄마가 3시간 후에는 짜증을 낼 수도 있다.(부하)
콜백방식을 쓴다면, 한번 집에 전화를 걸어 어머니에게 혹시 택배가 오면 사무실로 전화를 해달라고 요청을 하기만 하면 된다. 사무실에서 일을 하다가 전화를 받아서 택배가 온 상황을 통보받으면 되는 것이다.
푸시서버(Push notification server)
카카오톡 등의 웹 기반의 실시간 채팅 어플리케이션은 서버가 클라이언트(예. 스마트폰)에게 알려줄 정보(예. 메시지)가 있을 경우 실시간으로 알려주어야 할 필요가 있다.
[카카오톡은 Push 서버와의 연결 상태를 보여주는 상태란이 있다. 연결이 안되어 있을 경우에는 주기적으로 연결을 하는 것으로 보인다]
이것 말고도 백신 소프트웨어는 주기적으로 자동업데이트를 하는데, 긴급한 악성 코드가 돌아 즉시 백신 업데이트를 해줄 필요가 있을 경우에 서버가 클라이언트에게 통지를 주는 방식을 사용한다면 업데이트 주기를 줄일 수 있을 것이다.
관련 외부 포스트들
Comet (programming) Wikipedia : http://en.wikipedia.org/wiki/Comet_(programming)
Asynchronous HTTP and Comet architectures : http://www.javaworld.com/javaworld/jw-03-2008/jw-03-asynchhttp.html
Play framework에서 Long Polling 구현하기
점프와 쉼없는 나아감 : Comet에 대하여 (or http://corund.net/blog/tag/comet)
봉쥬르(kbat73)님의 네이버 블로그 : DWR - Reverse Ajax part1 :: Piggyback, Polling, Comet
HTML5 Server-Push Technologies, Part 1 / HTML5 Server-Push Technologies, Part 2
APNS :
[iPhone/Java] 내가 만든 어플에 Push Notification 적용하기 : http://theeye.pe.kr/421
동우 왈
Redis
http://rediscookbook.org/pubsub_for_synchronous_communication.html
http://simonwillison.net/static/2010/redis-tutorial/
varnish - HTTP accelerator
tomcat / redis
Windows (with Cygwin DLL by POSIX system call API) : https://www.varnish-cache.org/trac/wiki/VarnishOnCygwinWindows
nginx cache (엔진-X) - 웹 서버, 리버스 프록시 및 메일 프록시 기능
10,000 inactive HTTP keep-alive connections take about 2.5M memory
http://www.kevinworthington.com/nginx-for-windows/
NGXMP: http://www.dev.naver.com/projects/ngxmp
with Java Servers: Jetty, GlassFish, Tomcat : http://wiki.nginx.org/JavaServers
Tomcat과의 연동: http://www.tuning-java.com/194
LightTPD
WLMP Project : http://en.wlmp-project.net/
ICEfaces: http://www.icefaces.org/main/community/projects-async.iface
Jetty
Asynchronous HTTP Server
Web Sockets server
GlassFish >> Project Atmosphere : http://atmosphere.java.net/
<- Atmosphere Framework: REST and Comet
APACHE SHIRO : http://shiro.apache.org/10-minute-tutorial.html
'Network' 카테고리의 다른 글
Web Socket(웹소켓) (0) | 2012.09.21 |
---|---|
톰캣 - Comet (0) | 2012.09.21 |
ARP(Address Resolution Protocol) (0) | 2012.09.21 |
윈도우 - 네트워크 탐색 (0) | 2012.09.21 |
TIME_WAIT (0) | 2012.09.21 |