* 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 |