(1) Netty Bootstrap이란?
- 애플리케이션의 동작 및 설정을 지정해주는 헬퍼클래스
(2) Bootstrap의 종류
- ServerBootstrap
- bootstrap
=> bootstrap은 클라이언트에서 사용하며, 구조적으로 ServerBootstrap과 동일
(3) Bootstrap의 논리적구조
(4) Bootstrap의 예제코드
public EchoServer() {
public static void main(String[] args){
bossGroup = new NioEventLoopGroup(1); // 생성자에 1이므로 단일스레드로 동작하는 객체
workerGroup = new NioEventLoopGroup(); // 생성자 인수가 없으면 cpu 코어 수에 따라 설정된다.
bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup) // boss – 연결, worker - 입출력
.channel(NioServerSocketChannel.class) // 부모쓰레드(boss) 입출력모드 설정 NIO모드
.childHandler(new ChannelInitializer<SocketChannel>() { //worker쓰레드 자식 채널의 초기화
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline();
// 핸들러 추가
pipeline.addLast(new EchoServerHandler());
}
});
}
bootstrap.bind(host,port).sync(); //socket 주소와 port binding
}
(5) Bootstrap의 구체적인 옵션
group: 이벤트 루프 설정
–클라이언트와 달리 이벤트 루프가 2개 필요
channel: 소켓 입출력 모드 설정
–LocalServerChannel: 로컬 가상 통신을 위한 소켓 채널
–OioServerSocketChannel: Blocking 소켓 채널
–NioServerSocketChannel: Nonblocking 소켓 채널
–EpollServerSocketChannel: epoll 소켓 채널 (리눅스에서만적용)
–OioSctpServerChannel: Blocking sctp 소켓 채널
–NioSctpServerChannel: Nonblocking sctp 소켓 채널
•SCTP(Stream Control Transmission Protocol): Layer 4 protocol
–NioUdtByteAcceptiorChannel: Nonblocking udt 소켓 채널
–NioUdtMessageAcceptorChannel: blocking udt 소켓 채널
•UDT(UDP-Based Data Transfer): Layer 7 protocol
channelFactory: 소켓 입출력 모드 설정
–Netty에서 기본 제공하는 channel class보다 더 복잡한 로직이 필요할 때 사용
handler: 서버 소켓 채널의 이벤트 핸들러 설정
–부모 쓰레드에서 발생한 이벤트만 처리
childHandler: 클라이언트 소켓 채널의 이벤트 핸들러 설정
–자식 쓰레드에서 발생한 이벤트만 처리
option - 서버 소켓 채널의 소켓 옵션 설정
–기본적으로 자바에서 설정할 수 있는 모든 소켓 옵션 설정 가능
–TCP_NODELAY: Nagle 알고리즘 비활성화 여부 설정
–SO_KEEPALIVE: 정해진 시간마다 keepalive packet 전송
–SO_SNDBUF: 커널 송신 버퍼 크기
–SO_RCVBUF: 커널 수신 버퍼 크기
–SO_REUSEADDR: TIME_WAIT 상태의 포트에도 bind 가능해짐
–SO_LINGER: 소켓을 닫을 때 송신 버퍼에 남은 데이터 전송 대기 시간
–SO_BACKLOG: 동시에 수용 가능한 소켓 연결 요청 수
childOption: 클라이언트 소켓 채널의 소켓 옵션 설정
'Framework > Netty' 카테고리의 다른 글
#Nettty Framework - ByteBuffer, ByteBuf (0) | 2018.05.09 |
---|---|
#Nettty Framework - ChannelFutureListener (0) | 2018.05.09 |
#Nettty Framework - 채널 파이프라인 및 코덱 (0) | 2018.05.09 |
#Nettty Framework - 이벤트 모델 (0) | 2018.04.20 |
# Netty Framework 개요 (2) | 2018.03.12 |