본문 바로가기

Java Programming/Netty

netty 요약

1. pipeline(파이프라인)

    - 명령어를 읽어 순차적으로 실행하는 실행하는 프로세서에 적용되는 기술로 한번에 하나의 명령어만 

      실행하는 것이 아니라 하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 식으로 동시에 

      여러개의 명령어를 실행하는 기법


2. Channel

     - 읽기, 쓰기, 연결(connect), 바인드(bind)등의 I/O 작업을 할 수 있는 요소 또는 네트워크 연결

        모든 I/O 작업은 비동기 -> ChannelFuture


핵심 메소드

ChannelFuture   write(Object obj)

ChannelFuture   flush(Object obj)

ChannelFuture   writeAndFlush(Object obj)

ChannelFuture   closeFuture()

ChannelPipeline pipeline()

SocketAddress   remoteAddress()


3. ChannelFuture

     - Channel의 I/O 작업의 결과

       ChannelFutureListener를 등록 결과에 따른 작업


핵심 메소드

ChannelFuture addListener(GenericFutureListener listener);

Channel       channel();

boolean       isSuccess();

Throwable     cause();

ChannelFuture await()

ChannelFuture sync()

  

4. ChannelHandler

     - Netty의 핵심 요소!

      Netty의 I/O 이벤트를 처리하는 인터페이스

      ChannelInboundHandlerAdapter

      ChannelOutboundHandlerAdapter


전체 메소드

void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)

void handlerAdded(ChannelHandlerContext ctx)

void handlerRemoved(ChannelHandlerContext ctx)


5. ChannelHandlerContext

     - ChannelHandler는 ChannelHandlerContext를 통해

      다음 ChannelHandler에게 이벤트를 넘기거나,

      동적으로 ChannelPipeline을 변경할 수 있음 - [실습4]


핵심 메소드

Channel               channel()

ChannelPipeline       pipeline()

ChannelFuture         write(Object msg)

ChannelHandlerContext fireChannelActive(Object msg)

ChannelHandlerContext fireChannelRead(Object msg)


6. ChannelPipeline

     - Channel에 드나드는 inbound / outbound 이벤트를 처리

Intercepting Filter 패턴 처리, ChannelHandler 리스트


주요 메소드

ChannelPipeline addLast(ChannelHandler... handlers)

ChannelPipeline addLast(String name, ChannelHandler handler)

ChannelHandler  remove(String name)

<T extends ChannelHandler> T remove(Class<T> handlerType)


7. EventLoop

     - 등록된 Channel들의 모든 I/O 작업을 처리

구현체 NioEventLoopGroup를 주로 사용


주요 메소드

boolean                inEventLoop()

<T> Future<T>          submit(Callable<T> task)

<V> Promise<V>         newPromise()

<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)



<Channel관련 인터페이스 전체 구조>

EventLoop -> Channel -> ChannelPipeline -> ChannelHandler -> ChannelHandler2 -> ChannelHandler N

    -> Channel

-> Channel   

  

컴퓨터 프로그래밍에서 event-driven programming은 사용자 동작 (마우스 클릭, 키 누름), 센서 출력 또는 

다른 프로그램 / 스레드의 메시지와 같은 이벤트에 의해 프로그램의 흐름이 결정되는 프로그래밍 패러다임입니다. 

이벤트 중심 프로그래밍은 사용자 입력에 응답하여 특정 동작을 수행하는 것을 중심으로하는 그래픽 사용자 

인터페이스 및 다른 애플리케이션 (예 : 자바 스크립트 웹 애플리케이션)에서 사용되는 주요 패러다임입니다.


사건 기반 프로그래밍(영어: Event-driven programming; EDP)은 비주얼 베이직과 같이, 사용자의 명령·마우스 클릭·다른 프로그램의 

메시지·키보드 글쇠 입력 등의 ‘사건’에 따라, 제어 흐름이 결정되어 일을 하도록 하게끔 만들어진 프로그래밍 언어 방식을 뜻한다


등잔 밑의 Event-Driven 코드

$("button").on("click", function(event) {

    console.log(event);

    alert("클릭");

});


Netty의 핵심 인터페이스

Channel

ChannelFuture

ChannelHandler

ChannelHandlerContext

ChannelPipeline

EventLoop



<netty 관련 사이트>    


1. http://atin.tistory.com/462 -> netty와 mina 관련 사이트 모음

2. http://ikpil.com/1338 -> netty 원문 번역 설명

3. https://github.com/hatemogi - 김대현 블로그 

4. http://hatemogi.github.io/netty-startup/#1 - Netty 시작

5. http://hatemogi.github.io/netty-startup/2.html#/1 - Netty 시작하기 (2)

6. http://netty.io/4.1/api/index.html - Netty 4.1 JavaDoc

7. http://javafactory.tistory.com/1525 - Netty 기초강좌(필독)

'Java Programming > Netty' 카테고리의 다른 글

netty 설명  (0) 2018.02.13