Netty与JDK自带NIO的使用对比

Netty与JDK自带NIO的使用对比

开发高质量的NIO程序并非一件简单的事情,出去NIO固有的复杂性和BUG不谈,做为NIO服务端,须要可以处理网络的闪断、客户端的重复接入、客户端的安全认证、消息的编解码、半包读写等状况,若是你没有足够的NIO编程经验积累,一个NIO框架的稳定性每每须要半年甚至更长的时间。更为糟糕的是,一旦在生产环境中发生问题,每每会致使跨节点的服务调用中断,严重的可能会致使整个集群环境都不可用,须要重启服务器,这种非正常的停机会带来巨大的损失编程

不选择Java原生NIO编程的缘由

  • NIO的类库和API繁杂,使用麻烦,你须要熟练掌握Selector,ServerSocketChannel、SocketChannel、ByteBuffer等。
  • 须要具有其余的额外技能作铺垫,例如熟悉Java多线程编程。这是由于NIO编程涉及到Reactor模式,你必须对多线程和网络编程很是熟悉,才能写出高质量的NIO程序。
  • 可靠性能力补齐,工做量和难度很是大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等问题,NIO编程的特色是功能开发相对容易,可是可靠性能力补齐的工做量和难度都很是大。
  • JDK NIO的BUG,例如epoll bug,它会致使Selector空轮询,最终致使CPU 100%。官方验证例子 基于以上缘由,在大多数场景下,不建议直接使用JDK的NIO类库,除非你精通NIO编程或者有特殊的需求。在绝大多数的业务场景中,咱们可使用NIO框架Netty来进行NIO编程,它既能够做为客户端也能够做为服务端,同时支持UDP和异步文件传输,功能很是强大。

为何选择Netty

使用Netty的有点能够总结以下:缓存

  • API使用简单,开发门槛低
  • 功能强大,预置了多种编解码功能,支持多种主流协议
  • 定制能力强,能够经过ChannelHandler对通讯框架进行灵活地扩展
  • 性能高,经过与其余业界主流的NIO框架对比,Netty的综合性能最优
  • 成熟、稳定,Netty修复了已经发现的全部JDK NIO BUG,业务开发人员不须要再为NIO的BUG而烦恼
  • 社区活跃,版本迭代周期短,发现的BUG能够被及时修复,同时,更多的新功能会加入
  • 经历了大规模的商业应用考验,质量获得验证。在互联网、大数据、网络游戏、企业应用、电信软件等众多行业获得成功商用,证实了它已经彻底可以知足不一样行业的商业应用了。
相关文章
相关标签/搜索