netty
一,netty拷问:
- 本质:JBoss做的一个jar包;
- 目的:快速开发高性能,高可靠的网络服务器和客户端程序;
- 优点:提供异步的,事件驱动的网络应用程序框架和工具;
二,netty的基本信息:
- Netty就是基于java NIO技术封装的一套框架;(为什么要封装呢,因为原生的javaNIO试用起来没有那么方便,而且还有臭名昭著的bug,nettey把它封装后,提供了一个易于操作的使用模式和接口,用户使用起来也就便捷多了);
- Netty是最流行的NIO框架,其健壮性,功能,性能,可定制性和可扩展行都是首屈一指的;
- NIO并不是java独有的,NIO代表的是io多路复用,它是由操作系统提供的系统调用;
- NIO的全称是NoneBlocking IO,非阻塞IOS,那么NIO是怎么做到非阻塞的呢?它用的是事件机制.它可以用一个线程把Accept,读写操作,请求处理的逻辑全干了.如果什么事都没得做,它也不会死循环,它会将线程休眠起来,直到下一个事件来了再继续干活,这样的一个线程称之为NIO线程.
三,特性:
设计
- 统一的API,适用于不同的协议(阻塞和非阻塞)
- 基于灵活,可扩展的事件驱动模型;
- 高度可定制的线程模型;
- 可靠的无连接Socket支持(UDP)
性能
- 更好的吞吐量,低延迟;
- 更省资源;
- 尽量减少不必要的内存拷贝;
安全
- 完整的SSL/TLS和STARTTLS的支持;
- 能在Applet和Android的限制环境运行良好;
健壮性
- 不再因过快,过慢或超负载连接导致OutOfMemoryError;
- 不再有在高速网络环境下NIO读写频率不一致的问题;
易用
- 完善的JavaDoc,用户指南和样例;
- 简洁简单;
- 仅依赖于JDK1.5
四,应用场景:
- 互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的RPC框架必不可少,Netty作为异步高新能的通信框架,往往作为基础通信组件被这些RPC框架使用,典型的应用有:阿里分布式服务框架Dubbo的RPC框架使用Dubbo协议进行节点间通信,Dubbo协议默认使用Netty作为基础通信组件,用于实现各进程节点之间的内部通信;
- 游戏行业:无论是手游服务端还是大型的网络游戏,Java语言得到了越来越广泛的应用.Netty作为高性能的基础通信组件,它本身提供了TCP/UDP和HTTP协议栈,非常方便定制和开发私有协议栈.账号登录服务器,地图服务器之间可以方便的通过Netty进行高性能的通信;
- 大数据领域:经典的Hadoop的高性能通信和序列化组件Avro的RPC框架,默认采用Netty进行跨界点通信,它的Netty Service基于Netty框架二次封装实现;