1、Netty 是什么
Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。
Netty 是一个广泛使用的 Java 网络编程框架
2、三大特点
并发高---基于NIO 非阻塞IO,并发性能得到了很大提高
传输快---依赖了NIO的一个特性——零拷贝
封装好---较NIO和BIO代码量少
3、Netty的重要概念
(1)channel---一个连接或每一个请求就是一个channel
(2)ByteBuf---存储字节的容器,可对整段字节缓存进行读写
- Heap Buffer 堆缓冲区----将数据存储在堆空间
- Direct Buffer 直接缓冲区----jdk1.4引入的nio的ByteBuffer类允许jvm通过本地方法调用分配内存,这样做有两个好处
- Composite Buffer 复合缓冲区
复合缓冲区相当于多个不同ByteBuf的视图,这是netty提供的,jdk不提供这样的功能。
(3)Codec---Netty中的编码/解码器,完成字节与pojo、pojo与pojo的相互转换
HttpRequestDecoder和HttpResponseEncoder
4、Netty和Tomcat的区别
1、Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器
Netty能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能
2、Tomcat的高并发主要以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能
JNI:Java本地接口书写程序(Java Native Interface),可以确保代码在不同的平台上方便移植
【注】BIO和NIO区别
BIO---一个线程处理一个Socket请求
NIO---一个线程可通过selector不断非阻塞遍历Socket处理多个Socket请求
【注】零拷贝
1、一般情况:文件---拷贝到Socket缓冲区----再拷贝到堆内存
一般我们的数据如果需要从IO读取到堆内存,中间需要经过Socket缓冲区,也就是说一个数据会被拷贝两次才能到达他的的终点,如果数据量大,就会造成不必要的资源浪费
2、零拷贝情况:堆内存之外开辟一块内存----IO直接读
当他需要接收数据的时候,他会在堆内存之外开辟一块内存,数据就直接从IO读到了那块内存中去,在netty里面通过ByteBuf可以直接对这些数据进行直接操作,从而加快了传输速度。
【注】封装的作用和优点
1、作用:保护或者防止代码(数据)被无意中破坏
2、优点
- 拒绝直接调用声明字段,保护内部数据,更安全;
- 在编程中可达到缓存的效果,执行效率高;
- 重复调用,避免代码冗余,程序编写效率高。
参考:
https://blog.csdn.net/qq_44034384/article/details/106470717