Netty简介PPT课件
- 格式:ppt
- 大小:1.01 MB
- 文档页数:27
【Netty】Netty框架介绍⼀、Netty简介 Netty是由JBOSS提供的⼀个java开源框架,现为 Github上的独⽴项⽬。
Netty提供异步的、事件驱动的⽹络应⽤程序框架和⼯具,⽤以快速开发⾼性能、⾼可靠性的⽹络服务器和客户端程序。
也就是说,Netty 是⼀个基于NIO的客户、服务器端的编程框架,使⽤Netty 可以确保你快速和简单的开发出⼀个⽹络应⽤,例如实现了某种协议的客户、服务端应⽤。
Netty相当于简化和流线化了⽹络应⽤的编程开发过程,例如:基于TCP和UDP的socket服务开发。
“快速”和“简单”并不⽤产⽣维护性或性能上的问题。
Netty 是⼀个吸收了多种协议(包括FTP、SMTP、HTTP等各种⼆进制⽂本协议)的实现经验,并经过相当精⼼设计的项⽬。
最终,Netty 成功的找到了⼀种⽅式,在保证易于开发的同时还保证了其应⽤的性能,稳定性和伸缩性1.1 Netty的特点设计优雅适⽤于各种传输类型的统⼀API - 阻塞和⾮阻塞Socket基于灵活且可扩展的事件模型,可以清晰地分离关注点⾼度可定制的线程模型 - 单线程,⼀个或多个线程池真正的⽆连接数据报套接字⽀持(⾃3.1起)使⽤⽅便详细记录的Javadoc,⽤户指南和⽰例没有其他依赖项,JDK 5(Netty 3.x)或6(Netty 4.x)就⾜够了⾼性能吞吐量更⾼,延迟更低减少资源消耗最⼩化不必要的内存复制安全完整的SSL / TLS和StartTLS⽀持社区活跃,不断更新社区活跃,版本迭代周期短,发现的BUG可以被及时修复,同时,更多的新功能会被加⼊1.2 Netty常见使⽤场景互联⽹⾏业在分布式系统中,各个节点之间需要远程服务调⽤,⾼性能的RPC框架必不可少,Netty作为异步⾼新能的通信框架,往往作为基础通信组件被这些RPC框架使⽤。
典型的应⽤有:阿⾥分布式服务框架Dubbo的RPC框架使⽤Dubbo协议进⾏节点间通信,Dubbo协议默认使⽤Netty作为基础通信组件,⽤于实现各进程节点之间的内部通信。
通信传输利器Netty(NetisDotNetty)介绍 (先埋怨⼀下微软⼤⼤)我们做NET开发,⼗分羡慕JAVA上能有NETTY, SPRING, STRUTS, DUBBO等等优秀框架,⽽我们NET就只有⼲瞪眼,哎,⽆赖之前⽣态圈没做好,恨铁不成钢啊。
不过由于近来Net Core的发布,慢慢也拉回了⼀⼩部分属于微软的天下,打住,闲话扯到这⼉。
DotNetty是Azure团队仿照(⼏乎可以这么说)JAVA的Netty⽽出来的(⽬前已实现Netty的⼀部分),⽬前在Github上的Star有1.8K+,地址:https:///Azure/DotNetty,没有任何⽂档,和代码中少量的注释。
虽然⽐Netty出来晚了很多年,不过我们NET程序员们也该庆幸了,在⾃⼰的平台上终于能⽤上类似Netty这样强⼤的通信框架了。
传统通讯的问题: 我们使⽤通⽤的应⽤程序或者类库来实现互相通讯,⽐如,我们经常使⽤⼀个 HTTP 客户端库来从 web 服务器上获取信息,或者通过web 服务来执⾏⼀个远程的调⽤。
然⽽,有时候⼀个通⽤的协议或他的实现并没有很好的满⾜需求。
⽐如我们⽆法使⽤⼀个通⽤的 HTTP 服务器来处理⼤⽂件、电⼦邮件以及近实时消息,⽐如⾦融信息和多⼈游戏数据。
我们需要⼀个⾼度优化的协议来处理⼀些特殊的场景。
例如你可能想实现⼀个优化了的Ajax 的聊天应⽤、媒体流传输或者是⼤⽂件传输器,你甚⾄可以⾃⼰设计和实现⼀个全新的协议来准确地实现你的需求。
另⼀个不可避免的情况是当你不得不处理遗留的专有协议来确保与旧系统的互操作性。
在这种情况下,重要的是我们如何才能快速实现协议⽽不牺牲应⽤的稳定性和性能。
解决: Netty 是⼀个提供 asynchronous event-driven (异步事件驱动)的⽹络应⽤框架,是⼀个⽤以快速开发⾼性能、可扩展协议的服务器和客户端。
换句话说,Netty 是⼀个 NIO 客户端服务器框架,使⽤它可以快速简单地开发⽹络应⽤程序,⽐如服务器和客户端的协议。
什么是netty--通俗易懂⼀.Netty介绍1.什么是nettyNetty 是由 JBOSS 提供的⼀个 Java 开源框架。
Netty 提供异步的、基于事件驱动的⽹络应⽤程序框架,⽤以快速开发⾼性能、⾼可靠性的⽹络 IO 程序,是⽬前最流⾏的 NIO 框架,Netty 在互联⽹领域、⼤数据分布式计算领域、游戏⾏业、通信⾏业等获得了⼴泛的应⽤,知名的 Elasticsearch 、Dubbo 框架内部都采⽤了 Netty。
2.为什么要⽤netty原⽣ NIO 存在问题:1.NIO 的类库和 API 繁杂2.需要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,必须对多线程和⽹络编程⾮常熟悉,才能编写出⾼质量的 NIO 程序3.开发⼯作量和难度都⾮常⼤。
例如客户端⾯临断连重连、⽹络闪断、半包读写、失败缓存、⽹络拥塞和异常流的处理等等处理起来难度会⽐较⼤。
4.JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU 100%。
直到 JDK 1.7 版本该问题仍旧存在,没有被根本解决。
ty的优点Netty 对 JDK ⾃带的 NIO 的 API 进⾏了封装,解决了上述问题。
1.设计优雅:适⽤于各种传输类型的统⼀ API 阻塞和⾮阻塞 Socket;基于灵活且可扩展的事件模型,可以清晰地分离关注点;⾼度可定制的线程模型 - 单线程,⼀个或多个线程池.2.使⽤⽅便:详细记录的 Javadoc,⽤户指南和⽰例;没有其他依赖项,JDK 5(Netty3.x)或 6(Netty4.x)就⾜够了。
3.⾼性能、吞吐量更⾼:延迟更低;减少资源消耗;最⼩化不必要的内存复制。
4.安全:完整的 SSL/TLS 和 StartTLS ⽀持。
5.社区活跃、不断更新:社区活跃,版本迭代周期短,发现的 Bug 可以被及时修复,同时更多的新功能会被加⼊⼆.Reactor三种线程模型1.现有的三种线程模型不同的线程模式,对程序的性能有很⼤影响,⽬前存在的线程模型有:①.传统阻塞 I/O 服务模型②Reactor 模式Reactor 模式⼜有 3 种典型的实现单 Reactor 单线程;单 Reactor 多线程;主从 Reactor 多线程Netty 的线程模型是主要是基于主从 Reactor 多线程模型改成了主从 Reactor 多线程模型有多个 Reactor模式2.传统阻塞 I/O 服务模型介绍特点:采⽤阻塞IO模式获取输⼊的数据每个连接都需要创建单独的线程完成数据的输⼊,业务处理和数据的返回缺点:当并发数很⼤,就会创建⼤量的线程,占⽤很⼤系统资源,在线程开销和上下⽂切换上降低处理性能当连接创建后,如果当前线程暂时没有数据可读,该线程会阻塞在read 操作,造成线程资源的浪费。
Netty实战⼊门详解——让你彻底记住什么是Netty(看不懂你来找我)⼀、Netty 简介Netty 是基于 Java NIO 的异步事件驱动的⽹络应⽤框架,使⽤ Netty 可以快速开发⽹络应⽤,Netty 提供了⾼层次的抽象来简化 TCP 和UDP 服务器的编程,但是你仍然可以使⽤底层的 API。
Netty 的内部实现是很复杂的,但是 Netty 提供了简单易⽤的API从⽹络处理代码中解耦业务逻辑。
Netty 是完全基于 NIO 实现的,所以整个Netty 都是异步的。
Netty 是最流⾏的 NIO 框架,它已经得到成百上千的商业、商⽤项⽬验证,许多框架和开源组件的底层 rpc 都是使⽤的 Netty,如 Dubbo、Elasticsearch 等等。
下⾯是官⽹给出的⼀些 Netty 的特性:设计⽅⾯对各种传输协议提供统⼀的 API(使⽤阻塞和⾮阻塞套接字时候使⽤的是同⼀个 API,只是需要设置的参数不⼀样)。
基于⼀个灵活、可扩展的事件模型来实现关注点清晰分离。
⾼度可定制的线程模型——单线程、⼀个或多个线程池。
真正的⽆数据报套接字(UDP)的⽀持(since 3.1)。
易⽤性完善的 Javadoc ⽂档和⽰例代码。
不需要额外的依赖,JDK 5 (Netty 3.x) 或者 JDK 6 (Netty 4.x) 已经⾜够。
性能更好的吞吐量,更低的等待延迟。
更少的资源消耗。
最⼩化不必要的内存拷贝。
安全性完整的 SSL/TLS 和 StartTLS ⽀持对于初学者,上⾯的特性我们在脑中有个简单了解和印象即可,下⾯开始我们的实战部分。
⼆、⼀个简单 Http 服务器开始前说明下我这⾥使⽤的开发环境是 IDEA+Gradle+Netty4,当然你使⽤ Eclipse 和 Maven 都是可以的,然后在 Gradle 的 build ⽂件中添加依赖 compile 'ty:netty-all:4.1.26.Final',这样就可以编写我们的 Netty 程序了,正如在前⾯介绍 Netty 特性中提到的,Netty 不需要额外的依赖。