加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 系统 > 正文

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中的管道流的概念!

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读