Uptime
http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/uptime/package-summary.html
Uptime 예제는 연결을 끊기면 재접속을 시도하는 클라이언트측 프로그램이다.
Discard와 Echo 클라이언트 프로그램과 다른 코드 부분을 살펴보면 다음과 같다.
72 bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
이전 예제와 다르게 파이프라인에 하나의 핸들러만 등록하지 않고 여러 개의 핸들러를 등록하고 있다. 처음으로 여러 핸들러를 등록한 예제라고 볼 수 있다. 우선 ReadTimeoutHandler가 무엇인지 살펴보자. 일정시간동안 read 하지 않으면 타임아웃 이벤트를 가지고 예외를 발생시킨다. 본 예제에서는 exceptionCaught 함수에서 접속을 종료한다. 접속종료가 완료되면 channelClosed 함수가 호출되고 이 함수내에 5초 마다 재연결을 시도하는 타이머를 지정한다.
ReadTiemoutHandler와 UptimeClientHandler 모두 SimpleChannelUpstreamHandler를 상속받은 클래스로써 업스트림 즉, ReadTimeoutHandler --> UptimeClientHandler 순으로 이벤트가 전달된다.
http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/uptime/package-summary.html
Uptime 예제는 연결을 끊기면 재접속을 시도하는 클라이언트측 프로그램이다.
Discard와 Echo 클라이언트 프로그램과 다른 코드 부분을 살펴보면 다음과 같다.
72 bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
73 public ChannelPipeline getPipeline() throws Exception {
74 return Channels.pipeline(
75 new ReadTimeoutHandler(timer, READ_TIMEOUT),
76 new UptimeClientHandler(bootstrap, timer));
77 }
78 });
이전 예제와 다르게 파이프라인에 하나의 핸들러만 등록하지 않고 여러 개의 핸들러를 등록하고 있다. 처음으로 여러 핸들러를 등록한 예제라고 볼 수 있다. 우선 ReadTimeoutHandler가 무엇인지 살펴보자. 일정시간동안 read 하지 않으면 타임아웃 이벤트를 가지고 예외를 발생시킨다. 본 예제에서는 exceptionCaught 함수에서 접속을 종료한다. 접속종료가 완료되면 channelClosed 함수가 호출되고 이 함수내에 5초 마다 재연결을 시도하는 타이머를 지정한다.
60 @Override 61 public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) { 62 println("Sleeping for: " + UptimeClient.RECONNECT_DELAY + "s"); 63 timer.newTimeout(new TimerTask() { 64 public void run(Timeout timeout) throws Exception { 65 println("Reconnecting to: " + getRemoteAddress()); 66 bootstrap.connect(); 67 } 68 }, UptimeClient.RECONNECT_DELAY, TimeUnit.SECONDS); 69 }
ReadTiemoutHandler와 UptimeClientHandler 모두 SimpleChannelUpstreamHandler를 상속받은 클래스로써 업스트림 즉, ReadTimeoutHandler --> UptimeClientHandler 순으로 이벤트가 전달된다.