Netty是由JBOSS提供的一个Java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。react
也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 能够确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty至关简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。apache
“快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题。Netty 是一个吸取了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各类二进制,文本协议,并通过至关精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性.
Mina是有apache开发的帮助用户开发高性能和高伸缩网络应用程序的框架。它经过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。
Netty与Mina的比较:编程
Netty Core是Netty核心内容,它包括事件模型、通用API和Zero Copy功能。是上层功能的基础,由Core能够构建不一样的应用服务。
Protocol Support提供了多种协议的编解码包括HTTP、二进制和Google Protobuf等等,它们经过Codec Framework进行整合。
Transport Support提供了基本的NIO和BIO传输实现,是Netty网络通讯的基础。
Security Support不光提供了通讯层的安全保障(好比SSL/TLS),还在应用层提供了解决OOM的方案。
Container Integration是能够应用于其余主流开发框架的集合,经过它能够和Spring、OSGi进行快速集成,为快速使用Netty提供基础支撑。
该层的主要职责是监听网络的读写和链接操做,负责将网络层的数据读取到内存缓冲区中,而后触发各类网络事件,例如链接建立、链接激活、读事件、写事件等等。将这些事件触发到PipeLine中,由PipeLine管理的职责链来后续进行处理。
PipeLine是职责链ChannelPipeLine,它负责事件在职责链中的有序传播,同时负责动态的编排职责链。职责链能够选择监听和处理本身关心的事件,它能够拦截处理和向后/向前传播事件。不一样应用的Handler节点的功能也不一样,一般状况下,每每会开发编解码Handler用于消息的编解码,它能够将外部的协议消息转换成内部的POJO对象,这样上层业务则只须要关心处理业务逻辑便可,不须要感知底层的协议差别和线程模型差别,实现层面的分层隔离。
业务逻辑编排层一般有两类:一类是纯粹的业务逻辑编排,还有一类是其余的应用层协议插件,用于特定协议相关的会话和链路管理。
架构的不一样层面,须要关心和处理的对象都不一样,一般状况下,对于业务开发者,只须要关心职责链的拦截和业务Handler的编排,由于应用层协议栈每每是开发一次,处处运行,实际上对于业务开发者来讲,只须要关心服务层的业务逻辑开发便可。各类应用协议以插件的形式提供,只有协议开发人员须要关注协议插件,对于其余业务开发人员来讲,只须要关心业务逻辑定制便可。这种分层的架构设计理念实现了NIO框架各层之间的解耦,便于上层业务协议栈的开发和业务逻辑的定制。
正是因为Netty的分层架构设计合理,基于Netty的各类应用服务器和协议栈开发才可以如雨后春笋般获得快速发展。数组
性能是设计出来的,而不是测试出来的安全
链路有效性检测服务器
心跳机制进行检测:空闲时检测,事件通知网络
内存保护机制架构
计数器、重用、上限并发
优雅停机框架
在互联网中的应用:Dubbo
提供异步、高性能的NIO的通讯框架
NIO客户端和服务端
心跳检测能力
断连重连机制
流量控制
Dubbo协议的编解码
大数据领域的应用:Apache Avro
提供异步、高性能的NIO的通讯框架
NIO客户端和服务端
心跳检测能力
断连重连机制
流量控制
游戏服务器的应用
为各进程提供高性能的异步网络通讯能力
自定义协议的编解码
心跳检测、流量整形、日志统计
SSL、黑白名单
内存池技术保证最大限度重用对象
深刻的技术演进
活跃的社区
最后的提交在两小时前
明确的Road Map
4.x
5.x