Netty
Netty的介绍
- Netty是由JBOSS提供的一个Java开源框架,现为Github上的独立项目。
- Netty是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络IO程序
- Netty主要针对在TCP协议下,面向Clients端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用
- Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景
- 要透彻理解Netty,需要先学习NIO,这样我们才能阅读Netty的源码
Netty的应用场景
- 互联网行业
- 互联网行业:在分布式系统中,各个节点之间需要远程服务调用RPC(Remote Procedure Call)远程过程调用,高性能的RPC框架必不可少,Netty作为异步高性能的通信框架,往往作为基础通信组件被这个RPC框架使用。
- 典型的应用有:阿里分布式服务框架Dubbo的RPC框架使用Dubbo协议进行节点间通信,Dubbo协议默认使用Netty作为基础通信组件,用于实现各进程节点之间的内部通信
- 游戏行业
- 无论是手游服务端还是大型的网络游戏,Java语言得到了越来越广泛的应用
- Netty作为高性能的基础通信组件,提供了TCP/UDP和HTTP协议,方便定制和开发私有协议栈,账号登录服务器
- 地图服务器之间可以方便的通过Netty进行高性能的通信
- 大数据领域
- 经典的Hadoop的高性能通信和序列化组件(ACRO 实现数据文件共享)的RPC框架,默认采用Netty进行跨界点通信
- 它的Netty Service基于Netty框架二次封装实现
原生NIO存在的问题
- NIO的类库和API复杂,使用麻烦:需要熟练账户哦Selector、ServerSocketChannel、SocketChannel、ByteBuffer等
- 需要具备的额外技能:要熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,开发者必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序
- NIO的开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等。
- JDK NIO的Bug:例如臭名昭著的Epoll Bug,它导致Selector空轮训,最终导致CPU 100%。知道JDK1.7版本该问题任然存在,没有被根本解决
Netty概述
- 概述
- 官网:https://netty.io
- Netty是基于事件驱动的网络应用框架为了快速的开发高性能的服务器客户端
- Netty是JBOSS提供的一个Java开源框架。Netty提供异步的,基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络IO程序
- Netty可以帮组开发者快速、简单的开发出一个网络应用,相当于简化和流程化了NIO的开发过程
- Netty是目前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,知名的ElasticSearch、Dubbo框架内部都采用了Netty