Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。
Netty 是一个广泛使用的 Java 网络编程框架(Netty 在 2011 年获得了Duke's Choice Award,见https://www.java.net/dukeschoice/2011)。它活跃和成长于用户社区,像大型公司 Facebook 和 Instagram 以及流行 开源项目如 Infinispan, HornetQ, Vert.x, Apache Cassandra 和 Elasticsearch 等,都利用其强大的对于网络抽象的核心代码。
以上是摘自《Essential Netty In Action》这本书,本文的内容也是本人读了这本书之后的一些整理心得,如有不当之处欢迎大虾们指正
Netty和Tomcat有什么区别?Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。
有人说netty的性能就一定比tomcat性能高,其实不然,tomcat从6.x开始就支持了nio模式,并且后续还有APR模式——一种通过jni调用apache网络库的模式,相比于旧的bio模式,并发性能得到了很大提高,特别是APR模式,而netty是否比tomcat性能更高,则要取决于netty程序作者的技术实力了。
为什么Netty受欢迎?如第一部分所述,netty是一款收到大公司青睐的框架,在我看来,netty能够受到青睐的原因有三:
Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,对比于BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高,两张图让你了解BIO和NIO的区别:
Selector
。除了BIO和NIO之外,还有一些其他的IO模型,下面这张图就表示了五种IO模型的处理流程:
以上摘自Linux IO模式及 select、poll、epoll详解
Netty为什么传输快Netty的传输快其实也是依赖了NIO的一个特性——零拷贝。我们知道,Java的内存有堆内存、栈内存和字符串常量池等等,其中堆内存是占用内存空间最大的一块,也是Java对象存放的地方,一般我们的数据如果需要从IO读取到堆内存,中间需要经过Socket缓冲区,也就是说一个数据会被拷贝两次才能到达他的的终点,如果数据量大,就会造成不必要的资源浪费。
Netty针对这种情况,使用了NIO中的另一大特性——零拷贝,当他需要接收数据的时候,他会在堆内存之外开辟一块内存,数据就直接从IO读到了那块内存中去,在netty里面通过ByteBuf可以直接对这些数据进行直接操作,从而加快了传输速度。
下两图就介绍了两种拷贝方式的区别,摘自Linux 中的零拷贝技术,第 1 部分
上文介绍的ByteBuf是Netty的一个重要概念,他是netty数据处理的容器,也是Netty封装好的一个重要体现,将在下一部分做详细介绍。
为什么说Netty封装好?要说Netty为什么封装好,这种用文字是说不清的,直接上代码:
阻塞I/Opublic class PlainOioServer { public void serve(int port) throws IOException { final ServerSocket socket = new ServerSocket(port); //1 try { for (;;) { final Socket clientSocket = socket.accept(); //2 System.out.println("Accepted connection from " + clientSocket); new Thread(new Runnable() { //3 @Override public void run() { OutputStream out; try { out = clientSocket.getOutputStream(); out.write("Hi!\r\n".getBytes(Charset.forName("UTF-8"))); //4 out.flush(); clientSocket.close(); //5 } catch (IOException e) { e.printStackTrace(); try { clientSocket.close(); } catch (IOException ex) { // ignore on close } } } }).start(); //6 } } catch (IOException e) { e.printStackTrace(); } }}
非阻塞IOpublic class PlainNioServer { public void serve(int port) throws IOException { ServerSocketChannel serverChannel = ServerSocketChannel.open(); serverChannel.configureBlocking(fa
扫码加微信详细咨询太和智慧养老产品和平台服务!
版权声明:
---------------------------------------------------------------
所有信息来源于互联网,本文的版权归原作者所有,不代表本网观点和立场。
本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 81480447@qq.com 举报,一经查实,本站将立刻删除。
扫码加微信详细咨询太和智慧养老产品和平台服务!
养老资讯
- 六七十年代,广播站广播员
- 长城下面的尸骨照片(能不
- 喧嚣的今天,还会有当年纯
- 法律事务工作总结(警察执
- 下属复制了我的简历去跳槽
- 老子道德经读后感(《道德
- 高中数学公式大全图片(有
- 老子曰打一诗人(老子和孔
- 托福写作方面20分,想得
- 朱生豪情书写得好在哪里?
- 数学说课稿模板(有没有考
- 无领导小组面试技巧(20
- 建设工程保证保险是什么?
- 杜富国事迹简介(蔡锷是谁
- 学校提出教师要守得住清贫
- 如何为山区少年捐赠书籍?
- 如果这个世界上没有钱,都
- 测试你适合读什么专业(读
- 财务管理专业简历(大四财
- 如何讲ppt才能不紧张不
- 生活中你有哪些和花有关的
- 屎的味道作文600字(如
- 2019说说(魅族手机能
- shuoshuo(说说你
- 520说说发朋友圈搞笑(
- 该怎么辅导孩子写作文(上
- 写情书给自己喜欢的人(写
- 热爱阅读的作文(看书真的
- 吃过苦以后,你有哪些人生
- 初中记叙文写作技巧(初中
- 字节跳动未来的发展前景如
- 感恩母亲图片图库(你什么
- 愚人节表情包(愚人节真的
- 能不能推荐一些花期长且能
- 国庆节法定3天为什么放7
- “时间”的概念是从何而来
- 世界公认最美的十首诗(你
- 为什么现在的人们都不爱写
- 今天的我们如何读《西游记
- 一个人突然离世的感悟(有
助老机构介绍
姓名:
年龄:
电话: