文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

对Netty组件的基本介绍

2024-04-02 19:55

关注

Netty的介绍

netty是一个异步的基于事件的框架,主要针对在tcp协议下,开发面向clients端的高并发应用。

netty本质是一个nio框架。

IO模型

Java共支持3中io模型 : BIO,AIO,NIO

BIO

同步阻塞,一个连接一个线程,有连接请求时服务端就需要启动一个线程处理。如果这个线程不做任何事就会造成不必要的开销。当并发数较大时,需要创建大量线程来处理连接。

NIO

同步非阻塞,可以做到一个线程处理多个操作。

NIO 有三大核心部分,Channel,Buffer ,selector

selector、 channel 和buffer的关系

  1. 每个channel 对应一个buffer
  2. selector 对应一个线程,一个线程对应多个channel
  3. 程序切换哪个channel 是由事件决定的。event
  4. selector 会根据不同的事件,在各个通道上切换
  5. Buffer 就是一个内存块,底层是有一个数组
  6. 数据的读取写入是通过buffer,既可以读也可以写, 两者切换的方法是flip
  7. channel 是双向的

Buffer缓冲区

一个可以读写数据的内存块,可以理解成一个容器对象。它负责从channel中读取数据,封装成Buffer对象。Buffer为每一个基本数据类型都提供了实现类。它主要有三个属性:

内存块的固定大小值

下一个要进行读写位置的索引

在写模式下,limit = position ,在读模式下,它表示你最多读到之前写入的最大值

重要的方法

allocate(int count) 初始化buffer容量

get () 从 position 位置读

flip() 由写模式切换为读模式

Channel 通道

作用类似于流,但是可以同时进行读写,可以异步读写。

Channel在NIo中是一个接口,它的实现类有:

主要方法:

Selector 选择器

能够监测多个注册的通道上是否有事件发生,如果有事件发生获取事件交给通道处理。

主要方法:

原生NIo存在的问题

类库与API复杂,开发难度大,有bug

Netty模型

  1. netty抽象出2组线程池,bossGroup 负责接受客户端的连接,workGroup 负责读写
  2. bossGroup 与workerGroup 都是NioEventLoopGroup
  3. 每一个NioEventLoopGroup相当于一个事件循环组,每个循环都是NIoEventLoop
  4. NIoEventLoop表示一个不断循环处理执行任务的线程

Netty核心模块组件

Bootstrap,ServerBootstrap

Channel

ChannelFuture

netty中所有操作都是异步的,所以我们需要一个能够确定其结果的方法。通过addListener() 方法获取通知。

ChannelHandler

处理入站和出栈逻辑的容器。

生命周期方法

handlerAdded 当ChannelHandler 添加到ChanelPipeLine中调用

handlerRemoved 移除时调用

它主要有2个子接口, ChannelInboundHandler 和 ChannelOutBoundHandler

ChannelPipeLine

它是ChannelHandler 的容器,内部定义了一组ChannelHandler,是一组过滤器链

ChannelHandlerContext

用于ChannelPipe 和 ChannelHandler的关联,同一个ChannelPipeline 里的ChannelHandler的交互。

ByteBuf

netty的数据容器,是netty实现数据传输的数据结构。

内部维护了两个不同的索引,readIndex ,writeIndex。通过这两个索引将数据划分为3个区域。已经读过的字节,可读字节,可写字节。相比于jdk原生的bytebuf ,它有两个指针,在读写转换时不需要进行flip()

到此这篇关于对Netty组件的基本介绍的文章就介绍到这了,更多相关Netty组件介绍内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯