Netty的基本架构介绍
发布时间:2022-06-21 14:33:35 所属栏目:系统 来源:互联网
导读:有道无术,术尚可求也!有术无道,止于术! 上一节课我们对Netty有了一个初步的认识,这一节课我们会一起俯瞰整个Netty的脉络,以便于对Netty的架构原理有一个整体的认知!下图是Netty的主要架构骨架: image-20210421090036067 我们上一节课使用的案例,使用的
有道无术,术尚可求也!有术无道,止于术! 上一节课我们对Netty有了一个初步的认识,这一节课我们会一起俯瞰整个Netty的脉络,以便于对Netty的架构原理有一个整体的认知!下图是Netty的主要架构骨架: image-20210421090036067 我们上一节课使用的案例,使用的是NioEventLoopGroup,他是NIO的实现,可以看出来他是MultithreadEventLoopGroup的子类,从名字上可以看出来,NioEventLoopGroup是一个多线程事件循环组,这里你可以把它看作是一个线程池,内部存在多个线程(NioEventLoop),每一个客户端连接的SocketChannel都对应一个线程(NioEventLoop)! 我们上面一直再说NioEventLoop, 我们基于上图可以看出来,他是SingleThreadEventLoop的子类,从名字上也能看出来,他是一个单线程的执行器!我们可以看到,他的父接口事实上也是继承与EventLoopGroup, 也就是说,虽然NIoEventLoop是一个单线程事件循环,但是我们基于接口,也可以把他看作为一个线程池,只不过这个线程池内部只有一个线程! 当我们调用Socket的读数据的API时,即从Socket管道读取数据时,Pipeline会按照你的添加顺序依次执行 Inbound Handler,当我们读取事件完毕,调用write方法向通道内写入数据的时候,管道流开始调用 Outbound Handler方法,倒序调用!这个倒序调用可能不好理解,我们还是用图来说明: 当调用read方法的时候,顺序调用Inbound节点! 当调用write方法的时候,倒序调用outbount方法! Netty的Handler事件回调种类 1. ChannelInboundHandler 方法名称 方法作用 handlerAdded 通道被添加 1 channelRegistered JDK注册成功后回调所有Handler的方法 2 channelActive jdkChannel被激活后回调 3 channelRead 通道内有数据可读 4 channelReadComplete 数据读取完毕 5 channelInactive 通道被关闭后回调该方法 6 channelUnregistered 通道被取消注册回调用该方法 7 handlerRemoved 通道被删除 8 userEventTriggered 如果触发了用户事件,则调用该方法。 channelWritabilityChanged 可写的状态改变 exceptionCaught 发生了异常 2. ChannelOutboundHandler 方法名称 方法作用 bind 进行绑定操作后调用。 connect 进行连接操作后调用。 disconnect 进行断开连接操作后调用。 close 进行关闭操作后调用。 deregister 从当前已注册的EventLoop进行注销操作后调用。 read 读数据 write 写数据 flush 刷新到管道 总结 通过本篇文章,我们可以了解到Netty中比较重要的几个概念,EventLoopGroup的基本概念、Netty中的通道概念、Netty中的管道流的概念! (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |