Netty和Tomcat

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、优点

  • 拒绝直接调用声明字段,保护内部数据,更安全;
  • 在编程中可达到缓存的效果,执行效率高;
  • 重复调用,避免代码冗余,程序编写效率高。

参考:

Netty入门教程——认识Netty - 简书

https://blog.csdn.net/qq_44034384/article/details/106470717

上一篇:通过大量实战案例分解Netty中是如何解决拆包黏包问题的?


下一篇:怎么通俗的理解Netty呢?