Netty 从零到一学习系列之初识篇

由于项目开发中需要用的网络通信,就研究了一下Netty的使用方法、原理及源码。现在总结学习新的及经验分享给大家。

一、为什么不选择Java原生的NIO

       在JDK1.4版本中已经引入了NIO,NIO弥补了原来同步阻塞I/O的不足,它在Java代码中提供了高速的、面向块的I/O。

      为什么不选择Java原生的NIO主要体现在以下几方面:

       1、NIO的类库和API复杂

             在使用Java原生NIO需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等类库或AIP。而这些类都相当的繁琐,不宜掌握。

        2、需要其他技能的铺垫

             NIO主要是非阻塞网络I/O,多路复用等技术,由于NIO编程涉及到了Reactor线程模式编程,需要熟练掌握Java的多线程编程技术。而Java的多线程编程技术又是一个相当复杂难以掌握的技能。

         3、可靠性能力补齐,难度和共工作量都非常大

             在网络编程中客户端面临着断连重连、网络闪断、读写半包、缓存失败、码流控制和网络控制等复杂的问题处理。所以NIO编程的特点是功能实现容易,但是可靠性能力补齐工作量和难度都非常大。

         4、JDK  NIO的缺陷。NIO可能会导致Selector的空轮询,最终导致CPU 使用达到100%,导致系统宕机。       

二、为什么选择Netty

   首先Netty是一个基于NIO实现的事件驱动的异步网络应用框架。Netty大大简化了TCP和UDP等网络程序的开发步骤,其从FTP、SMTP、HTTP、许多二进制和基于文本的传统协议等协议中吸取了经验,使得Netty在开发效率、性能、稳定性、灵活性等方面都有优异的表现。其次Netty也是业界流行的NIO框架之一,其它的健壮性、性能、功能、可定制性和可扩展性等方面都首屈一指。

        使用Netty的原因主要有以下几方面:

        1、API使用简单,开发门槛低。

        2、功能强大,内置了多种编码功能,支持多种主流协议

        3、定制能力强,可以通过ChannelHandler对通信框架进行灵活的扩展。

        4、性能高,通过与其他框架相比较,Netty的综合性能最优。

        5、成熟、稳定,Netty修复了JDK NIO的BUG,在开发过程中不需要关心这些BUG。

        6、社区活跃,版本的迭代周期短,发现BUG能够及时进行修复。

        7、经历了大规模的商业应用实践,质量得到了验证,其在互联网、大数据、网络游戏、企业应用等方面都得到了应用。

    

 

说明:在学习过程中主要参考了  《Netty实践》、《Netty权威指南第二版》和网络博客。写此博客主要是作为学习笔记,增强记忆。

 

 

你可能感兴趣的:(java,NIO,Netty,网络编)