【Netty】5 源码 Bootstrap

 AbstractBootstrap,为这篇做了个铺垫。

一、概述

Bootstrap 是 Netty 提供的一个便利的工厂类, 我们可以通过它来完成 Netty 的客户端或服务器端的 Netty 初始化.
Bootstrap: 用于客户端,只需要一个单独的Channel,来与服务端进行数据交互,对应server端的子Channel。
作用职责:EventLoop初始化,channel的注册过程 ,关于pipeline的初始化,handler的添加过程,客户端连接分析。

Netty客户端源码部分

  EventLoopGroup group = new NioEventLoopGroup();          try {              Bootstrap b = new Bootstrap();              b.group(group) // 注册线程池               .channel(NioSocketChannel.class) // 使用NioSocketChannel来作为连接用的channel类               .handler(new ChannelInitializer<SocketChannel>() { // 绑定连接初始化器                         @Override                         protected void initChannel(SocketChannel ch) throws Exception {                                      //这里放入自定义助手类                                      ch.pipeline().addLast(new EchoClientHandler());                                  }                              });                        ChannelFuture cf = b.connect(host, port).sync(); // 异步连接服务器              cf.channel().closeFuture().sync(); // 异步等待关闭连接channel            } finally {              group.shutdownGracefully().sync(); // 释放线程池资源          }      }

从上面的客户端代码虽然简单, 但是却展示了 Netty 客户端初始化时所需的所有内容:

1. EventLoopGroup: 不论是服务器端还是客户端, 都必须指定 EventLoopGroup. 在这个例子中,     指定了 NioEventLoopGroup, 表示一个 NIO   的EventLoopGroup. 2. ChannelType: 指定 Channel 的类型. 因为是客户端, 因此使用了 NioSocketChannel. 3. Handler: 设置数据的处理器. 4. 这里的option,提供了一系列的TCP参数

下面我们深入代码, 看一下客户端通过 Bootstrap 启动后, 都做了哪些工作.

二、源码分析

 

1、group(group)

 /**   * 直接调用父类AbstractBootstrap的方法   */ public B group(EventLoopGroup group) {     if (group == null) {         throw new NullPointerException("group");     }     if (this.group != null) {         throw new IllegalStateException("group set already");     }     this.group = group;     return self(); }

直接调用父类的方法 ,说明该EventLoopGroup,作为客户端 Connector 线程,负责注册监听连接操作位,用于判断异步连接结果。

 

2、channel(NioServerSocketChannel.class)

在 Netty 中, Channel是一个Socket的抽象, 它为用户提供了关于 Socket 状态(是否是连接还是断开) 以及对 Socket 的读写等操作. 每当 Netty 建立了一个连接后, 都会有一个对应的 Channel 实例。

2.1源码

/**  * 同样也是直接调用父类AbstractBootstrap的方法  */     public B 
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信