06 Netty核心模块组件


在这里插入图片描述

  • Netty抽象出两组线程池BossGoup专门负责接收客户端的连接,Worker专门负责网络的读写

  • BossGroupWorkerGroup类型都是NioEnventLoopGroup

  • NioEnventLoopGroup相当于一个事件循环组,这个组含有多个事件循环,每一个事件循环是NioEventLoopp

  • NioEnventLoop表示一个不断循环的执行处理任务的线程,每个NioEnventLoop都有一个Selector,用于监听绑定在其上的sockety的网络通讯

  • NioEnventLoopGroup可以有多个线程,既可以含有多个NioEventLoop

  • 每个Boss NioEnvenetLoop循环执行的步骤有3步:
    - 轮询accept事件
    - 处理accept事件,与client监理连接,生成NioSocketChannel,并将其注册到某个Worker NIOEventLoop上的Selector
    - 出路任务队列的任务,即runAllTasks

  • 每个Workert NioEventLoop循环执行的步骤
    - 轮询readwrite事件
    - 处理I/O事件,即read、write事件,在对应NioSocjetChannel处理
    - 处理任务队列的任务,即runAllTasks

  • 每个WorkerNIOEventLoop处理业务时,会使用PipeLine(管道)PipeLine中包含了Channel,即通过pipeLine可以获取对应通道,管道中维护了很多处理器

BootStrap、ServerBootStrap(配置引导类)

  • BootStrap意思是引导,一个Netty应用通常由一个BootStrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中BootStrap类是客户端程序的启动引导类,ServerBootStrap是服务端启动引导类

  • 常见的方法有
    在这里插入图片描述

    //使用链式编程来进行设置、
            bootstrap.group(bossGroup,workerGroup)//设置两个线程组
                     .channel(NioServerSocketChannel.class)//使用NioSocektyChannel作为服务器的通道实现
                    .option(ChannelOption.SO_BACKLOG,128)//设置线程队列的连接个数
                    .childOption(ChannelOption.SO_KEEPALIVE,true)//设置保持活动联结状态
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        //ChannelPipeLine是一个Handler集合,它负责处理和拦截
                        //inbound或者outbound的事件和操作,相当于贯穿Netty的链
                        //也已
                       //给pipeline设置处理器
                        @Override
                        protected void initChannel(SocketChannel socketChannel) throws Exception {
                            socketChannel.pipeline().addLast(new NettyServerHandler());
                        }//创建一个通道测试对象
                    });//给workergroup的EnventLoop对应的管道设置处理器

Future、ChannelFuture

Netty中所有的IO操作都是异步的,不能立刻得到消息是否被正确处理,单丝可以过一会等他执行完成或者直接注册一个监听,具体的实现就是通过Future和ChannelFutures,他们可以注册一个监听,当操作执行成功或失败监听会子动触发注册监听的事件。

常见的监听方法有

  • Channel channel:返回当前正在进行IO操作的通道
  • ChannelFuture sync()等待异步操作执行完毕

Channel

在这里插入图片描述
在这里插入图片描述
** 不同协议,不同阻塞类型的连接都有不同的Channel类型与之对应,常用的Channel类型有**
在这里插入图片描述

EnventLoopGroup和其实现类NioEventLoopGroup

在这里插入图片描述
在这里插入图片描述

Selector(聚合在NioEventGroup)

  • Netty基于Selector对象实现I/O多路复用,通过selector一个线程可以监听多个Channel事件
  • 当向一个Selector中注册Channel后,Selector内部的机制就可以自动不断的查询select这些注册的Channel是否有就绪的I/O事件(例如可读,可写,网络连接完成等),这样程序就可以很简单的使用一个线程高效的管理多个Channel

ChannelHandler及其实现类

  • ChannelHandler是一个接口,处理I/O事件或拦截I/O操作,并将其转发到其ChannelPipeLine(业务处理链)中的下一个处理程序
  • ChannelHandler本身没有提供很多方法,因为这个接口有许多的方法需要实现,方便使用期间,可以继承它的子类
  • ChaneelHandler及其

在这里插入图片描述

  • ChannelInboundHandler用于处理入站I/O事件
  • ChannelOutboundHandler用于处理出栈I/O操作
  • 我们经常需要自定义一个Handler类取继承ChannelInboundHandlerAdapter,然后通过重写相应方法实现业务逻辑,我们接下来看看一般都需要重写哪些方法:

在这里插入图片描述

PipeLine和ChannelPipeLine

在这里插入图片描述

  • ChannelPipeLine是一个Handler的集合,它负责处理和拦截inbound或者outbound的事件和操作,相当于一个贯穿Netty的链(也可以这样理解:ChannelPipeLine是保存C hannelHnadler的List,用于处理或拦截Channel的入站事件和出站事件)
  • ChannelPipeLine实现了一种高级形式的拦截过滤器模式,使用户可以完全控制事件的处理方式,以及Channel中各个的ChannelHandleer如何相互交互
  • 在Netty中每个Channel都有且仅有一个ChannelPipeLine与之对应,它们的组成关系如下:
    在这里插入图片描述
  //使用链式编程来进行设置、
            bootstrap.group(bossGroup,workerGroup)//设置两个线程组
                     .channel(NioServerSocketChannel.class)//使用NioSocektyChannel作为服务器的通道实现
                    .option(ChannelOption.SO_BACKLOG,128)//设置线程队列的连接个数
                    .childOption(ChannelOption.SO_KEEPALIVE,true)//设置保持活动联结状态
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        //ChannelPipeLine是一个Handler集合,它负责处理和拦截
                        //inbound或者outbound的事件和操作,相当于贯穿Netty的链
                        //也已
                       //给pipeline设置处理器
                        @Override
                        protected void initChannel(SocketChannel socketChannel) throws Exception {
                            socketChannel.pipeline().addLast(new NettyServerHandler());
                        }//创建一个通道测试对象
                    });//给workergroup的EnventLoop对应的管道设置处理器


ChannelHandlerContext

在这里插入图片描述

ChannelOption

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值