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());
          }
        });
  }
  1. 부트스트랩에 쓰레드 등록. 첫번째는 부모고 두번째는 자식. 부모는 외부에서 들어오는 클라이언트 연결을 받고 자식은 연결된 클라이언트 소켓을 바탕으로 데이터 입출력 및 이벤트 처리를 담당

  2. 부모 쓰레드가 사용할 네트워크 입출력 모드 설정

  3. 자식 쓰레드의 초기화 방법 설정. 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