Java原生NIO的缺陷
- 类库和API繁杂
- 入门门槛高,需要其他额外的知识做铺垫
- 工作量和难度大,客户端会面临断开,重连,网络闪断,失败缓存,网络拥堵等问题
- JDK NIO存在臭名昭著的epoll bug,导致Selector空轮询:这个bug会导致linux上cpu 100%
Netty的优势
- 业界流行的NIO框架之一,健壮性,功能,可定制性,可扩展性都比较好,得到了业界的认可与证明。比如在dubbo框架中的底层应用
- API使用简单,定制能力强,可以灵活扩展
- 入门门槛低,易学,功能强大,预置了多种编解码功能,支持多种主流通信协议(http,tpc,udp,socket)
- 性能高,成熟,稳定
Netty介绍
Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients.It greatly simplifies and streamlines network programming such as TCP and UDP socket server.
Netty使用场景
Netty常见的使用场景如下:
互联网行业
在分布式系统中,各个节点之间需要远程服务调用,高性能的RPC框架必不可少,Netty作为异步高新能的通信框架,往往作为基础通信组件被这些RPC框架使用。
典型的应用有:阿里分布式服务框架Dubbo的RPC框架使用Dubbo协议进行节点间通信,Dubbo协议默认使用Netty作为基础通信组件,用于实现各进程节点之间的内部通信。
游戏行业
无论是手游服务端还是大型的网络游戏,Java语言得到了越来越广泛的应用。Netty作为高性能的基础通信组件,它本身提供了TCP/UDP和HTTP协议栈。
非常方便定制和开发私有协议栈,账号登录服务器,地图服务器之间可以方便的通过Netty进行高性能的通信
大数据领域
经典的Hadoop的高性能通信和序列化组件Avro的RPC框架,默认采用Netty进行跨界点通信,它的Netty Service基于Netty框架二次封装实现