Netty 부트스트랩
애플리케이션의 각종 동작, 설정 지정 헬퍼
구조
전송 계층 (소켓 모드 및 IO 종류)
이벤트 루프 (싱글 쓰레드, 멀티 쓰레드)
채널 파이프라인 설정
소켓 주소와 포트
소켓 옵션
ServerBootstrap
예제
public EchoServer() {
bossGroup = new NioEventLoopGroup(1);
workerGroup = new NioEventLoopGroup();
bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup) // 1
.channel(NioServerSocketChannel.class) // 2
.childHandler(new ChannelInitializer<SocketChannel>() { // 3
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline();
// 핸들러 설정
pipeline.addLast(new EchoServerHandler());
}
});
}
부트스트랩에 쓰레드 등록. 첫번째는 부모고 두번째는 자식. 부모는 외부에서 들어오는 클라이언트 연결을 받고 자식은 연결된 클라이언트 소켓을 바탕으로 데이터 입출력 및 이벤트 처리를 담당
부모 쓰레드가 사용할 네트워크 입출력 모드 설정
자식 쓰레드의 초기화 방법 설정. ChannelInitializer은 연결된 채널이 초기화될 때 호출되는 기본 동작
입출력 모드 변경
Nonblocking :
NIOEventLoopGroup
,NioServerSocketChannel
Blocking :
OioEventLoopGroup
,OioServerSocketChannel
Epoll :
EpollEventLoopGroup
,EpollServerSocketChannel
epoll 모드는 리눅스에서만 사용 가능
API
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보다 더 복잡한 로직이 필요할 때 사용
channel class의 constructor에 패러미터가 없다면 그냥 channel() 쓰는걸 추천
handler: 서버 소켓 채널의 이벤트 핸들러 설정
부모 쓰레드에서 발생한 이벤트만 처리
childHandler: 클라이언트 소켓 채널의 이벤트 핸들러 설정
자식 쓰레드에서 발생한 이벤트만 처리
option - 서버 소켓 채널의 소켓 옵션 설정
기본적으로 자바에서 설정할 수 있는 모든 소켓 옵션 설정 가능
TCP_NODELAY: Nagle 알고리즘 비활성화 여부 설정
SO_KEEPALIVE: 정해진 시간마다 keepalive packet 전송
SO_SNDBUF: 커널 송신 버퍼 크기
SO_RCVBUF: 커널 수신 버퍼 크기
SO_REUSEADDR: TIME_WAIT 상태의 포트에도 bind 가능해짐
SO_LINGER: 소켓을 닫을 때 송신 버퍼에 남은 데이터 전송 대기 시간
SO_BACKLOG: 동시에 수용 가능한 소켓 연결 요청 수
childOption: 클라이언트 소켓 채널의 소켓 옵션 설정
Bootstrap
클라이언트 어플리케이션 설정
기본적으로 ServerBootstrap와 대동소이
API
group: 이벤트 루프 설정
ServerBootstrap이랑 달리 패러미터를 1개만 받음
channel: 클라이언트 소켓 입출력 모드 설정
클라이언트 소켓 채널만 설정 가능
channelFactory: 소켓 입출력 모드 설정
마찬가지로 클라이언트 소켓 채널만 설정 가능
handler: 클라이언트 소켓 채널의 이벤트 핸들러 설정
ChannelInitializer class로 등록됨
ServerBootstrap의 childHandler이랑 같음
option: 클라이언트 소켓 채널의 소켓 옵션 설정
Last updated