Netty 读后感

 第一次参加iteye的图示试读活动,由于本人水平有限,如有不当之处,还望各位看官多多指教。

 

Netty简介:

我们来看看netty的简介,以下出自百度百科:

写道
Netty 是JBOSS提供的一个java开源框架,Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程
“快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题。Netty 是一个吸收了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。

http://hae.iteye.com/blog/2114581

下图是netty的官网上的框架组件图:


         

 NIONEW IO的简称,学习java的都应该知道java中是有自己的NIO类库实现的,NIOjdk1.4就被引入了,可以说NIO不是新知识了。虽然Java中已经有自己的NIO类库,至于Java NIO 编程为什么没有流行起来的原因,在书中Netty权威指南》作者给出了我们答案

写道
1. 大多数高性能服务器,被C 和C++语言盘踞,由于它们可以直接使用操作系统的异
步I/O 能力,所以对JDK 的NIO 并不关心;
2. 移动互联网尚未兴起,基于Java 的大规模分布式系统极少,很多中小型应用服务对
于异步I/O 的诉求不是很强烈;
3. 高性能、高可靠性领域,例如银行、证券、电信等依然以C++为主导,Java 充当打杂
的角色,NIO 暂时没有用武之地;
4. 当时主流的J2EE 服务器,几乎全部基于同步阻塞I/O 构建,例如Servlet、Tomcat 等,
由于它们应用广泛,如果这些容器不支持NIO,用户很难具备独立构建异步协议栈的能力;
5. 异步NIO 编程门槛比较高,开发和维护一款基于NIO 的协议栈对很多中小型公司来
说像是一场噩梦;
6. 业界NIO 框架不成熟,很难商用;
7. 国内研发界对NIO 的陌生和认识不足,没有充分重视。

 http://hae.iteye.com/blog/2114581

基于上述几种原因,基于Java的 NIO 编程的推广和发展长期滞后。值得欣慰的是,随着大规模分布式系统、大数据和流式计算框架的兴起,基于Java 来构建这些系统已经成为主流,NIO 编程和NIO 框架在此期间得到了大规模的商用。在互联网领域,阿里的分布式服务框架DubboRocketMQ,大数据的基础序列化和通信框架Avro,以及很多开源的软件都已经开始使用Netty 来构建高性能、分布式通信能力,Netty 社区的活跃度也名列前茅。根据目前的信息,Netty 已经在如下几个领域得到了大规模的商业应用。

1. 互联网领域;

2. 电信领域;

3. 大数据领域;

4. 银行、证券等金融领域;

5. 游戏行业;

6. 电力等企业市场。

 

-------------------------------割  ------  割------------------------------------

 试读目录:

   


本次《Netty权威指南》的试读目录是10.3-10.4,书页不多,内容充实,读起来还是比较轻松的。

 

在试读章节中作者向我们解释了为什么要自己实现http协议栈功能:

写道
在java领域,最常用的http协议栈就是基于http协议栈就是基于servlet规范的tomcat,jetty容器,但是,很多基于http的应用都是后天应用,http仅仅是承载数据交换的一个通道,是一个载体而不是web容器,因此,一般不需要类似于tomcat这样的重量型web容器。
在网络安全日益严峻的今天,重量级的web容器由于功能繁杂,会存在很多安全漏洞,电信的如tomcat,需要为web容器做很多安全加固工作去修复这些漏洞,但是你并没有使用到这些功能,这会带来开发和维护成本的增加,在这种场景下,一个更加轻量级的http协议栈是个更好的选择。

 

作者通过介绍http协议栈的优缺点,引导读者深入浅出循环渐进的学习,为接下来的开发实战做了很好的铺垫,在接下来的开发实战中我们会学习使用netty实现自己的http协议栈。

 http://hae.iteye.com/blog/2114581

 

开发实战:

书中作者通过一个实例程序,向我们模拟了一个简单的用户订购系统。

 



 

作者通过对以上订购流程图深入的分析,让读者了解到哪些能力是Netty支持的(如步骤2,netty自带的http协议栈,可以支持http链路的建立和请求消息的发送,直接重用netty的能力即可),哪些需要扩展开发实现(如netty无法对xml格式和pojo对象的相互编解码),并给出了更详细的设计思路(如 使用高效的XML绑定框架JIBX来灵活的实现POJO-XML的互相转换)

 

总结: http://hae.iteye.com/blog/2114581

作者通过模拟一个实际工作中会使用到的完整的软件开发流程开发场景介绍,协议栈的设计,到框架的开发测试呈现给了读者一个完整的http+xml协议栈的功能实现,其中涉及的很多细节和方法值得我们借鉴和学习。

 

很荣幸可以拜读到国内Netty资深一线专家的作品,作者向我们展示了netty的原理和架构,是作者多年的实战经验总结和浓缩,值得我们深入学习。