ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Netty和Tomcat

2021-09-20 17:31:55  阅读:177  来源: 互联网

标签:Netty NIO 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,NIO,Tomcat,---,内存,缓冲区
来源: https://blog.csdn.net/qq_44641527/article/details/120393250

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有