• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:java开发技术之Netty几个核心类介绍

java 搞代码 4年前 (2022-01-27) 15次浏览 已收录 0个评论

ByteBuf
JDK原生ByteBuffer的外围性能

  1. 字节缓冲区,次要对字节进行操作的一个类
  2. 可能将缓冲区建设在堆内和堆外。一般的new byte[] ,都只是建设在堆内

Netty之所以要本人封一套ByteBuf的次要起因是:

  1. 原生ByteBuffer 容量固定,一旦调配不能动静扩容和膨胀。
  2. 原生ByteBuffer 的API应用不够优雅。稍有不慎,应
    来源gaodai.ma#com搞#代!码网

    用将会出错。它有3个外围指针,别离为position、 limit、capacity 。position : 地位,示意缓冲区中正在操作数据的地位。limit : 界线,示意缓冲区中能够操作数据的大小,(limit 后数据不能进行读写) capacity : 容量。读写须要调用flip()、rewind()、clear()等办法来挪动相干指针 。

ByteBuf 呢?它应用了外围的两个地位指针来帮助读写操作java培训,别离为readerIndex和writerIndex,数据读取readerIndex会减少,数据写入writerIndex会减少,不须要减少额定的操作来挪动相干指针。此外 readerIndex 是不可能超过 writerIndex。读取过 的 0 ~ readerIndex 这部分空间是被视为弃用的,同时它能够进行主动扩容。
Channel
Channel 是网络操作抽象类,聚合了一组性能,提供了比原生Java SocketChannel、ServerSocketChannel大而全的性能接口,供业务开发者应用,包含但不限于网络的读、写、发动连贯、敞开连贯、获取通信单方的地址。
UnSafe
Channel 的辅助操作类,操作底层网络I/O,都是由它负责实现。
ChannelPipeLine
是Channel数据管道的一个形象,音讯在ChannelPipeLine中流动和传递。它依据I/O事件的类型,将消息传递给ChannelHandler进行解决。同时对ChannelHandler链表进行治理和调度。在读取数据时,ChannelHandler链表的调度程序是ch1,ch2,ch3,写数据时调度程序为ch3,ch2,ch1。能够说它是ChannelHandler的一个治理容器。
ChannelHandler
解决相应I/O事件的通道音讯处理器,比方,读事件、写事件、读实现事件、写实现事件等,Netty中泛滥的编解码器等都是实现自 ChannelHandler。
ChannelHandlerContext
通道处理器上下文,通过它来实现Channel 、ChannelPipeline、ChannelHandler这几个组件之间的交互,采纳常识最小化准则让每个组件只关怀ChannelHandlerContext相干API,。
ok,咱们来大抵梳理一下对于通道的几个外围类关系。

  1. 每个Channel会绑定一个ChannelPipeline,ChannelPipeline中也会持有Channel的援用
  2. ChannelPipeline持有ChannelHandlerContext链路,保留ChannelHandlerContext的头尾节点指针
  3. 每个ChannelHandlerContext会对应一个ChannelHandler,也就相当于ChannelPipeline持有ChannelHandler链路
  4. ChannelHandlerContext同时也会持有ChannelPipeline援用,也就相当于持有Channel援用

NioEventLoopGroup
Netty遵循Reactor根底线程模型的一个具体实现。以下是Reactor几种根底线程模型介绍。
Reactor 单线程模型,所有的I/O操作都在同一个线程上实现。
Reactor多线程模型,有一个用于专门接管客户端TCP连贯的NIO线程,网络I/O 读、写操作有专门一个NIO线程池解决。
主从Reactor多线程模型,专门接管客户端TCP连贯的不在是一个线程,而是一个独立的线程池(主),网络I/O 读、写操作依然是专门一个NIO线程池解决(从)


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:java开发技术之Netty几个核心类介绍
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址