Netty面试题

Netty是什么

Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是基于NIO的,它封装了JDK的NIO,让我们使用起来更加方法灵活。

Netty的特点是什么

  • 高并发:Netty是一款基于NIO开发的网络通信框架,对比BIO,他的并发性得到了很大的提高;
  • 传输快:Netty的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝,实现了更高效率的传输;
  • 封装好:Netty封装了NIO操作的很多细节,提供了易于使用调用接口。

Netty的优势有哪些

使用简单:封装了NIO的很多细节,使用更简单;

功能强大:预置了多种编码功能,支持多种主流协议;

定制能力强:可以通过ChannelHandler对通信框架进行灵活地扩展;

性能高:通过与其他业界主流NIO框架对比,Netty的综合性能最优;

稳定:Netty修复了已经发现的所有NIO的bug,让开发人员可以专注于业务本身;

社区活跃:Netty是最活跃的开源项目,版本迭代周期短,bug修复速度快。

什么是零拷贝

Netty的零拷贝主要包含三个方面

  • Netty接受和发送ByteBuffer采用DIRECT BUFFERS,使用堆外直接内存进行Socket读写,不需要进行字节缓冲区的二次拷贝。如果使用传统的堆内存(HEAP BUFFERS)进行Socket读写,JVM会将堆内存Buffer拷贝一份到直接内存中,然后才写入Socket中。相比于堆外直接内存,消息在发送过程中多了一次缓冲区的内存拷贝;
  • Netty提供了组合Buffer对象,可以聚合多个ByteBuffer对象,用户可以像操作一个Buffer那样方便地对组合Buffer进行操作,避免了传统通过内存拷贝的方式将几个小Buffer合并成一个大的Buffer;
  • Netty的文件传输采用了transferTo方法,它可以直接将文件缓冲区的数据发送到目标Channel,避免了传统通过循环write方法导致的内存拷贝问题。

Netty中有哪些重要组件

  • Channel:Netty网络操作抽象类,它除了基本的I/O操作,如bind、connect、read、write等
  • EventLoop:主要是配合Channel处理I/O操作,用来处理连接的生命周期中所发生的事情;
  • ChannelFuture:Netty框架中所有I/O操作都是异步的,因此我们需要ChannelFuture的addListener()注册一个ChannelFutureListener监听事件,当操作执行成功或失败时,监听就会自动触发返回结果;
  • ChannelHandler:充当了所有处理入站和出站数据的逻辑容器。ChannelHandler主要用于处理各种事件,这里的事件很广泛,比如可以是连接、数据接收、异常、数据转换等;
  • ChannelPipeLine:为ChannelHandler链提供了容器,当channel创建时,就会自动分配到它专有的ChannelPipeLine,这个关联是永久性的。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值