본문 바로가기
Netty

Netty 중요 개념 / Serverbootstrab 설정

by 아이티.파머 2018. 4. 2.
반응형

* Netty 부트스트랩 중요 개념 

이벤트 루프  : 소켓채널에서 발생한 이벤트를 처리하는 스레드 모델에 대한 구현 

채널 전송 모드 : 크게 블로킹, 논블로킹, epoll 의 3가지모드 

(현재 까지 알려진것중 epoll 이 가장 빠름 - linux 에서 지원 )


채널 파이브라인 : 연결된 채널 에서 사용할 데이터 핸들러에 대한 내용



AbstractBootstrab

|

___________________________

| |


           Bootstrap ServerBootstrap



* AbstractBootstrab

ServerBootstrap

첫번째 부모 쓰레드는 클라이언트 연결 요청의 수락을 담당 한다. 

두번째 인수는 연결된 소켓에 대한 I/O 를 처리 하는 자식 쓰레드 이다.


(클라이언트 연결 요청 수락 이벤트루프와, 데이터 송수신 처리를 위한 이벤트 루프 )



Bootstrab

연결 요청이 완료된 이후의 데이터 송수신 처리를 위해서 하나의 이벤트루프 생성 




* ServerBootstrap 중요 Configration


1. channel 

서버 , 클라이언트 Bootstrab에 모두 존재하는 API 이며, 생성된 채널의 입출력 모드를 설정 할 수 있다. 


설정 가능한 채널 중요  Class 정의 


.OioServerSoketChannel.class

.NioServerSoketChannel.class

.EpollServerSockeetChannel.class


2. option 설정 (ChannelOption.SO_BACKLOG)

소캣의 동작 방식 지정, 소켓의 송수 신 패킷 크기 설정 


TCP_NODELAY : 데이터 송수신에 네이글 알고리즘 비활 성화 여부 지정 

SO_KEEPALIVE : 운영체제에서 지정된 시간에 한번씩 keepalive 패킷을 상대 방에게 전송 

SO_BACKLOG : 동시에 수용 가능한 소켓 연결 요청수 


3. Handler 

서버 소켓 채널의 이벤트 핸들러 설정 

부모 쓰레드에서 발생한 이벤트 처리


4. childHandler 

ChannelInitializer  클라이 언트로 부터 연결된 채널이 초기화 될때 기본 동작이 지정된 추상 클레스 

initChannel 안에서 채널 파이프라인 객체 생성 


HTTP Protocal 이용시 사용할 Pipeline 

HttpRequestDecoder

HttpObjectAggregator(요청 처리 양 byte)

HttpResponseEncoder

HttpContentCompressor(HTTP 압축)


5. childOption

클라이언트 소켓 채널의 소켓 옵션 설정




ChannelPipeLine 


1. Channel Inbound Event 순서 

ChannelRegistered > channelActive > channelRead > channelReadComplete > channelInactive > channelUnregistered 


1.1 Inbound Event 역할 

ChannelRegistered 

채널이 이벤트 루푸에 등록 된경우 

서버는 최초 서버 소켓 채널 등록, 매연결마다 클라이언트 소켓 채널 등록 ,  두번 실행 됨

클라이언트는 connect()호출시마다 발생 

channelActive

채널 입출력 준비 완료

연결 직후 한번 수행하는 작업에 유용 

channelRead

데이터가 수신되었음

ByteBuf 객체로 전달됨 

channelReadComplete

데이터 수신 완료 

소켓 채널에 더이상 읽을 데이터가 없을 경우 

channelInactive

채널 비활성화시 


channelUnregistered 

채널이 이벤트 루프에서 제거된 경우 

채널 이벤트 처리 불가 


3. Channel Outbound Event 순서 

프로그램에서 어떤 동작을 요청 했을때 

반응형

'Netty' 카테고리의 다른 글

Netty EventLoop / ChannelPipeLine 모델  (0) 2018.06.27
Netty Discard/Echo Server  (0) 2018.01.24