《 Netty权威指南(第2版)》 学习感悟
1:Netty是什么?
Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序dsf。
也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。
“快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题。Netty 是一个吸收了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。
Netty具有如下优势:
- 处理大容量数据流更简单
- 处理协议编码和单元测试更简单
- I/O超时和idle状态检测
- 应用程序的关闭更简单,更安全
- 更可靠的OutOfMemoryError预防
传输方式为:
- 基于BIO和NIO的UDP传输
- 本地传输(又名 in-VM传输)
- HTTP通道,可绕过防火墙
2:Netty可以做什么?
netty是一套在java NIO的基础上封装的便于用户开发网络应用程序的api. 应用场景很多,诸如阿里的消息队列(RocketMQ),分布式rpc(Dubbo)通信层都使用到了netty(dubbo可以用服务发现自由选择通信层). 主要优点个人总结如下:
1. netty是非阻塞事件驱动框架, 并结合线程组(group)的概念,可以很好的支持高并发,慢连接的场景。
2. 编程接口非常容易,并且也较好的解决了TCP粘包/拆包的问题.netty提供了自己的ByteBuf和channel,相比于jdk的ByteBuffer和channel来说更简便灵活操作, 并提供了pipeline的概念,并针对每个contextHandler都可以由用户定义, 方便直接.
3. 有一些web框架已经开始直接使用netty做为底层通信服务,诸如play. 这样play就不用依赖于容器去进行部署,在没有nginx做反向代理的情况下也能支持高并发.编解码器可以随意扩展,今天是个web,明天就可以是一个ftp或email服务器,个人觉得比较灵活。
《 Netty权威指南(第2版)》试读章节是服务端创建,其对原生NIO类库的使用复杂性进行了讲解,对Netty服务端穿件的时序图和步骤进行了详细说明,对Netty源码对服务端创建进行剖析,最后对新的客户端接入进行了源码层面的分析和讲解。通过本章节的学习,读者可以掌握Netty服务端创建并且可以在实际中使用,编写出高效的代码。
Netty服务端创建时序图:
![](http://dl2.iteye.com/upload/attachment/0109/8770/7baa778e-9446-3c29-8f67-ef03d30713c0.png)
Netty服务端创建程序:
import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.http.HttpContentDecompressor; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpServerCodec; import java.io.File; import java.io.IOException; import java.net.InetSocketAddress; import org.apache.log4j.PropertyConfigurator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; import com.innoplay.httpserver.config.ConfigInfo; import com.innoplay.httpserver.config.ConfigProperties; import com.innoplay.service.context.ApplicationContextUtil; /** * server main entrance, netty tcp server listen on configInfo.listenPort * */ public class HttpServer { /** * init load config information */ private static ConfigInfo configInfo; private static final Logger logger = LoggerFactory .getLogger(HttpServer.class); private static ServerBootstrap bootstrap; /** * start server method * * @param args * @throws IOException */ private void start() throws Exception { EventLoopGroup group = new NioEventLoopGroup(configInfo.getThreadNum()); try { bootstrap = new ServerBootstrap(); bootstrap .group(group) .channel(NioServerSocketChannel.class) .localAddress( new InetSocketAddress(configInfo.getListenPort())) .childHandler(new ChannelInitializer<SocketChannel>() { /* * (non-Javadoc) * * @see * io.netty.channel.ChannelInitializer#initChannel(io * .netty.channel.Channel) */ @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new HttpServerCodec()); ch.pipeline().addLast(new HttpContentDecompressor()); ch.pipeline().addLast(new HttpObjectAggregator(Integer.MAX_VALUE));//定义 ch.pipeline().addLast(new HttpServerHandler()); } }); ChannelFuture f = bootstrap.bind().sync(); logger.info(HttpServer.class.getName() + " started and listen on " + f.channel().localAddress()); f.channel().closeFuture().sync(); } finally { group.shutdownGracefully().sync(); } } /** * main entrance * * @param args */ public static void main(String[] args) { try { //program argument setting/windows/linux //conf.path=E:\Workspace\server\trunk\innoplay-httpserver\target\conf if(args != null) { for(String s : args) { if(s.startsWith("--conf.path")) { System.setProperty(ConfigProperties.CONFIGPATH, s.replace("--conf.path=", "")); PropertyConfigurator.configure(System.getProperty(ConfigProperties.CONFIGPATH) + File.separator + "log4j.properties"); logger.info("System has received conf.path: {}", s); } } } else { logger.error("please setting the --conf.path=XXXX, system exited!"); System.exit(-1); } configInfo = ConfigProperties.loadProperties(); // ApplicationContext context = new FileSystemXmlApplicationContext(System.getProperty(ConfigProperties.CONFIGPATH) + File.separator +"applicationContext.xml"); ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml"); ApplicationContextUtil.setContext(context); HttpServer server = new HttpServer(); server.start(); } catch (Exception e) { logger.error("Server occur an error!", e.getCause()); e.printStackTrace(); } } public static void close() { if (bootstrap != null) { try { bootstrap.group().shutdownGracefully().sync(); } catch (InterruptedException e) { logger.error("Server close occur an error!", e.getCause()); e.printStackTrace(); } } } }
相信这本书对学习Netty的爱好者有很好的帮助,对编写出高效的代码有很好的帮助。
相关推荐
Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版...
《Netty权威指南第二版》源代码是一份珍贵的学习资源,由知名作者李林锋编写,专注于Java网络编程框架Netty的深入解析。这个压缩包包含的不仅是代码,更是理解和掌握Netty技术的关键。Netty是基于Java NIO(非阻塞I/...
总的来说,《Netty权威指南》是一本全面且深入的Netty学习资料,无论你是初学者还是有经验的开发者,都能从中获益,提升你的网络编程技能,为构建高性能、低延迟的网络应用打下坚实基础。通过阅读这本书,你将能够...
《Netty权威指南》第1版 是异步非阻塞通信领域的经典之作,基于最新版本Netty 5.0编写,是国内首本深入介绍Netty原理和架构的技术书籍,也是作者多年实战经验的总结和浓缩。在理论方面,讲解了Netty的逻辑架构模型和...
《Netty权威指南》第二版是由李林锋编著的一本深入解析Netty框架的专业书籍。Netty是一款高性能、异步事件驱动的网络应用程序框架,广泛应用于开发高并发、低延迟的网络应用,如分布式系统、游戏服务器、云计算平台...
netty权威指南 第二版是一本Netty架构学习指南,由李林锋编著。本书深入剖析了Netty,更全面系统讲解底层架构、实践与源码,能够让读者更清晰地理解Netty 架构设计理念,第2版增加了MessagePack 编解码、服务端创建...
《Netty 权威指南(第2 版)》适合架构师、设计师、软件开发工程师、测试人员以及其他对JavaNIO 框架、Netty 感兴趣的相关人士阅读,通过《Netty 权威指南(第2 版)》的学习,读者不仅能够掌握Netty 基础功能的使用...
总而言之,《Netty 权威指南》是一本深入讲解 Netty 框架的书籍,对于想要在 IT 领域提升网络编程技能的开发者来说,是不可或缺的学习资料。通过学习,你可以了解并掌握如何利用 Netty 构建高效、可靠的网络服务。
《Netty权威指南》第2版 是异步非阻塞通信领域的经典之作,基于最新版本Netty 5.0编写,是国内首本深入介绍Netty原理和架构的技术书籍,也是作者多年实战经验的总结和浓缩。在理论方面,讲解了Netty的逻辑架构模型和...
根据提供的信息,《Netty权威指南(第二版)》是一本专注于Netty框架的书籍,旨在为读者提供深入理解和掌握Netty所需的知识与实践技巧。以下将根据标题、描述及部分标签内容来概述Netty框架的核心知识点。 ### ...
《Netty权威指南(第二版)》是深入理解Netty的关键参考资料,它详细介绍了Netty的设计理念、核心组件以及如何利用Netty构建高效网络应用。 在Netty中,关键知识点包括: 1. **NIO基础**:Netty基于Java NIO(非...
《Netty权威指南 第2版源码》是深入理解并应用Netty框架的重要参考资料,它提供了Netty框架的源代码,让开发者能够直观地学习和研究Netty的内部实现机制。Netty是一个高性能、异步事件驱动的网络应用程序框架,主要...
《Netty 权威指南(第2 版)》适合架构师、设计师、软件开发工程师、测试人员以及其他对Java NIO 框架、Netty 感兴趣的相关人士阅读,通过《Netty 权威指南(第2 版)》的学习,读者不仅能够掌握Netty 基础功能的...
Netty权威指南 第2版 [李林锋著作][电子工业出版社][2015.04][554页]
《Netty权威指南 第2版》还包含了书签目录,使得读者能更方便地定位到所需的内容,提升学习和查阅的效率。无论你是Java通信领域的初学者,还是经验丰富的专业人士,这本书都将成为你提升技能、解决问题的重要参考...
总而言之,《Netty权威指南》是一本全面而实用的Netty学习资料,无论你是初学者还是有经验的开发者,都能从中获益匪浅。通过阅读这本书,你将能够深入了解Netty框架,提高网络编程的效率和质量,为你的IT事业奠定...