Эта статья основана на анализе финальной версии netty-4.1.8., главным образом, для анализа процесса инициализации Netty Server.

  • Эта статья основана на анализе финальной версии netty-4.1.8., главным образом, для анализа процесса инициализации Netty Server.
  • Что касается анализа исходного кода Netty — в первую очередь рекомендуется статья о клиенте Bootstrap.
  • Поймите процесс инициализации и регистрации NioServerSocketChannel.
  • Поймите процесс привязки ServerBootstrap и отношения между BossGroup и WorkGroup.

Корпус сервера Netty

public final class DiscardServer {

    static final boolean SSL = System.getProperty("ssl") != null;
    static final int PORT = Integer.parseInt(System.getProperty("port", "8009"));

    public static void main(String[] args) throws Exception {
        // Configure SSL.
        final SslContext sslCtx;
        if (SSL) {
            SelfSignedCertificate ssc = new SelfSignedCertificate();
            sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey()).build();
        } else {
            sslCtx = null;
        }
        // parent bossGroup
        EventLoopGroup bossGroup = new NioEventLoopGroup(1);
        // child workerGroup
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            // create ServerBootstrap
            ServerBootstrap b = new ServerBootstrap();
            // binding group
            b.group(bossGroup, workerGroup)
              // binding channel
             .channel(NioServerSocketChannel.class)
              // bind parent handler
             .handler(new LoggingHandler(LogLevel.INFO))
              // Binding child handler
             .childHandler(new ChannelInitializer<SocketChannel>() {
                 @Override
                 public void initChannel(SocketChannel ch) {
                      // Add handler to ChannelPipeline
                     ChannelPipeline p = ch.pipeline();
                     if (sslCtx != null) {
                         p.addLast(sslCtx.newHandler(ch.alloc()));
                     }
                     p.addLast(new DiscardServerHandler());
                 }…