본문 바로가기

Network

톰캣 - Comet

Comet with Tomcat

기존에 사용하는 WAS를 Tomcat 으로 사용했기에 익숙한 톰캣으로 정했다.

자료가 별로 없어 'http://corund.net/blog/entry/자바-서블릿-컨테이너의-Comet-지원-2---Tomcat'를 참고 했다.

시간이 나면 Advanced IO and Tomcat 의 Comet support 부분도 읽어보면 도움이 될 것 같다.

High-performance Ajax with Tomcat Advanced I/O

 

Tomcat 6.0/conf/server.xml 수정

기존

  1. <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

수정

  1. <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   connectionTimeout="20000" redirectPort="8443" />

공통 속성

protocol: 커넥터들의 비교

HTTP/1.1 (=org.apache.coyote.http11.Http11Protocol) [기본값]

org.apache.coyote.http11.Http11NioProtocol - 논 블로킹 자바 커넥터(Comet을 사용시) / NIO를 사용

org.apache.coyote.http11.Http11AprProtocol - APR 커넥터(아파치 등과 연동시 유용)

redirectPort: SSL요청이 아닌 연결에 대해 리다이렉트 할 포트를 지정

port: 연결이 들어올 서버 소켓의 TCP 포트 번호

표준 구현

connectionTimeout: 커넥터를 위해 기다릴 밀리초의 숫자를 적음. 연결이 이루어진 이후에 URI에 대해 보존될 시간
   (기본값: 60초 / 60000, AJP의 경우 기본값은 unlimited이다.)

NIO 구현

useComet : comet 서블릿을 허용할지 여부 설정 (기본값: true)

maxKeepAliveRequests : 서버에 의해 닫을 HTTP 연결의 최대 제한수(1: HTTP/1.0 keep-alive 미사용&HTTP/1.1 keep-alive및 파이프라이닝 사용, 무제한, -1: 무제한, 기본값: 100)

socket.bufferPool: Nio 채널이라고 불리는 소켓에 담아둘 엘리먼트의 수(기본값: 500, -1:무제한, 0: 캐싱안함)

 

위의 Connector만 수정하고 기존과 수정후의 까딸리나 로그(catalina.2011-09-24.log)를 확인해보았다.

다른 부분만 추려봤다.

기존

2011. 9. 24 오후 3:49:21 org.apache.coyote.http11.Http11AprProtocol init
정보: Initializing Coyote HTTP/1.1 on http-8080
2011. 9. 24 오후 3:49:21 org.apache.coyote.http11.Http11AprProtocol start
정보: Starting Coyote HTTP/1.1 on http-8080

수정후

2011. 9. 24 오후 3:51:27 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
정보: Using a shared selector for servlet write/read

2011. 9. 24 오후 3:51:27 org.apache.coyote.http11.Http11NioProtocol init
정보: Initializing Coyote HTTP/1.1 on http-8080
2011. 9. 24 오후 3:51:27 org.apache.coyote.http11.Http11NioProtocol start
정보: Starting Coyote HTTP/1.1 on http-8080

Http11AprProtocol 가 Http11NioProtocol로 바뀌었고 NioSelectorPool을 사용하는 것이 새로 생겼다.

 

Comet을 구현하기 위해서는 CometProcessor 를 implments 하면 되는데

  1. public void event(CometEvent event) throws IOException, ServletException {
  2. }

형태의 메소드를 오버라이드 해야 한다. (이클립스에서는 형태를 자동으로 만들어준다.

구현하는 것에 대해서는 아래의 목록을 참고하세요.

이클립스에서 Comet 프로젝트 만들기

Comet 서블릿 처리하기

'Network' 카테고리의 다른 글

이젠 모바일이 대세  (0) 2013.09.08
Web Socket(웹소켓)  (0) 2012.09.21
푸시통지(Push Notification)  (2) 2012.09.21
ARP(Address Resolution Protocol)  (0) 2012.09.21
윈도우 - 네트워크 탐색  (0) 2012.09.21