【本身读源码】Netty4.X系列(一) 启动类概览

一些想法

这个系列想开好久了,本身使用netty也有一段时间了,利用netty也编写了一个简单的框架,并运用到工做中了,感受还不错,趁着这段时间工做不是很忙,来分析一波源码,提高下技术硬实力。设计模式

结构

这里先看下netty包的目录结构网络

clipboard.png

由名字来作个大概的推测吧:框架

Bootstrap     顾名思义,启动类的意思
Buffer        应该和读取传输数据有关
Channel       负责网络链接那块
Handler       这个应该是维护自身逻辑的部分,也是开发者须要开发的部分
Resolver      看了下里面的类,猜想是和解析网络地址有关
Util          这个很明了,工具类嘛,不过netty的工具类会很复杂

目录就像书本的目录同样,能帮助咱们理清大概的头绪。tcp

启动类

而后再看下netty的tcp标准启动类写法,我想你们应该都很熟悉了ide

final EventExecutorGroup group = new DefaultEventExecutorGroup(16);
EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1)
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
    ServerBootstrap b = new ServerBootstrap(); // (2)
    b.group(bossGroup, workerGroup)
            .channel(NioServerSocketChannel.class) // (3)
            .childHandler(new ChannelInitializer<SocketChannel>() { // (4)
                @Override
                public void initChannel(SocketChannel ch) throws Exception {
                    //添加解码器
                    ch.pipeline().addLast(new xxxxDecoder());
                    //添加编码器
                    ch.pipeline().addLast(new xxxxEncoder());

                }
            })
            .option(ChannelOption.SO_BACKLOG, 128)          // (5)
            .childOption(ChannelOption.SO_KEEPALIVE, true); // (6)
    ChannelFuture f = b.bind(9999).sync(); // (7)
    f.channel().closeFuture().sync();
} catch (InterruptedException e) {
    e.printStackTrace();
} finally {
    workerGroup.shutdownGracefully();
    bossGroup.shutdownGracefully();
}

按个人理解简单解释下吧,就是先配置启动类,而后绑定并监听端口,最后监听关闭事件,具体细节咱们慢慢来看。工具

配置

先看下配置启动类,这个就是比较流行的链式方法,其实很简单,return this就好了oop

clipboard.png

咱们再来看下channel的配置项学习

clipboard.png

其实是实现了一个channelFactory接口的工厂类,这个就是经典的工厂设计模式this

clipboard.png

咱们能够有不一样的实现方式,netty这里默认的是用的反射工厂类,然而当我尝试找其余工厂的实现,很遗憾没有发现。编码

泛型

看到这里,我是对这些方法的签名有些奇怪,为何要用泛型来实现呢

clipboard.png

实际上是netty有多个启动类,咱们这个是服务端启动类serverBootstrap,还有客户端的Bootstrap,这两个都继承了一个抽象类abstractBootstrap,那两个类的一些公用的方法,是写在抽象父类中的,就拿这个配置方法来讲,若是直接在父类中return this,那返回的仍是父类,会有些方法的损失,因此这里用泛型来实现类,能够直接在父类中转为子类再return

clipboard.png

最后看下这个抽象类的签名吧,我以为能够学习学习,仍是挺优雅的

clipboard.png

Next

此次就看到这里,下一节咱们看一下启动类里的成员的类型和它们的大概的做用,而后动手实现咱们本身的一个简单的启动类。

相关文章
相关标签/搜索