1、原生NIO存在哪些缺陷
(1)NIO的类库和API繁杂,使用也比较麻烦,需要熟练掌握selector、ServerSocketChannel、SocketChannel、ByteBuffer等
(2)NIO入门门槛高,需要其他相关技能的铺垫,比如:熟悉java多线程编程,因为NIO编程涉及到Reactor模式,必须对多线程和网络非常熟悉,才能编写出高质量的NIO程序。
(3)工作量大,难度大,可靠性能力补齐和工作量难度大,比如客户端面临断连、重连,网络闪断,半包读写,失败缓存,网络拥塞,还有就是异常码流的处理等问题,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐的工作量和难度是非常大的。
(4)JDK NIO存在bug,著名bug是epoil bug,会导致select空轮询,最终导致CPU飙升到百分之百,官方的声称是在JDK1.6的版本中,UPDATE18修复了该问题,但是直到JDK1.7版本,该问题依旧存在,只不过该bug的发生概率降低了一些,并未从根本上得到解决,原始NIO存在非常多的缺陷。
2、Netty的优势
是业界最流行的NIO框架之一,它的健壮性,功能,性能,可定制性,可扩展性,在同类框架中都是首屈一指的,它已经得到成百上千的商业项目的验证,比如阿里的分布式治理框架Dubbo,就是用了Netty作为底层通信框架,还有一些主流的RPC框架,也用了Netty来构建高性能的异步通信能力。
(1)API使用简单,定制能力强,可以通过ChannelHandler对框架进行灵活的扩展。
(2)入门门槛低,功能强大,预制了多种编解码功能,支持多种主流协议,
(3)性能高,通过与其他的业界主流的NIO框架对比,Netty的综合性能最优。
(4)Netty比较成熟稳定,Netty修复了JDK NIO所有发现的bug,业务开发人员不需要,再为JDK NIO的bug烦恼,Netty经历了大规模的商业项目的验证,质量得到验证。在互联网,大数据,网络游戏,企业应用,电信软件等众多行业得到成功商用,证明了它完全可以满足不同行业的商业应用。
来源:oschina
链接:https://my.oschina.net/u/4416387/blog/4063404