一、Netty简介
什么是Netty?
1、高性能事件驱动,异步非阻塞的IO加载开源框架.
它是由JBoss提供,用于建立TCP等底层链接.基于Netty可以建立高性能的HTTP服务器,快速开发高性能,高可靠型网络服务器和客户端程序,支持HTTP、webSocket、 Protobuf( protobuf是google序列化的工具,主要是把数据序列化成二进制的数据来传输用的)、Binary、UDP。尤其是因为其具有高性能非阻塞性的特点,可以作为socket底层的通信基础,用到的服务器有Dubbo、Mina等
2、基于NIO的客户端,服务端编程框架
使用Netty可以确保快速和简单的开发出一个网络应用,例如实现了某种协议的客户端、服务端应用,Netty相当简化和流线化网络应用的开发过程,比如TCP和UDP的Socket服务开发,
3、提供了非常可靠的稳定性和伸缩性
Netty 的快速和简单,并不意味着会让最终的应用程序,产生维护性和性能上的问题,Netty是一个吸收了多种协议的,实现经验的,并且经过了相当精心的设计,最终Netty找到一种方式,在保证易用开发的同时,还保证了其应用的性能,稳定性和良好的伸缩性。
二、Netty使用场景
1、Netty被广泛应用于高性能领域
Netty 作为一个高性能的NIO框架,在高性能领域,譬如游戏、大数据,分布式计算领域,得到了广发的应用。
2、Netty被广泛应用于多线程并发领域
Netty 的多线程模型采用 Reactor模式, Reactor模式主要由多路复用器,事件分发器,事件处理器组成,可以分为三种,第一种单线程模型,所有的IO都由一个线程完成,即多路复用、事件分发、处理都是在一个Reactor线程完成的。第二种多线程模型,为了解决单线程模型的一些问题,演化而来的多线程模型,在多线程模型的基础上,又演化出主从线程模型,采用多个Reactor,每个Reactor都在自己单独的线程里执行,如果是多核,就可以同时享受多个客户端请求,一旦链路建立成功,就将链路注册负责IO读写的sub reactor模型上。
3、Netty被广泛应用于异步通信领域
作为一个异步的NIO框架,Netty全部IO都是异步非阻塞的,通过FutureListener机制,用户能够方便的主动获取,或者通过通知机制获得IO的操作结果。
三、Netty主要需要学习总纲
1、Netty的IO通信
主要学习Java的BIO操作,伪异步IO通信,NIO通信,AIO通信,同时,对四种通信进行对比。
2、Netty的入门级学习
主要学习原生NIO存在什么样的缺陷,有哪些不足的地方,Netty对比原生NIO存在什么样的优势 。
3、WebSocket的入门级学习
主要学习什么是webSocket,webSocket建立链接的方式,webSocket的生命周期,webSocket是如何关闭的。
4、Netty实现WebSocket通信案例
主要学习实现功能,开发服务端,客户端,测试程序
5、Netty学习总结
四、Netty学习前准备
1、有一定的Java基础
主要由Java开发的NIO开源框架。
2、有一定的IO编程基础
3、了解Java的BIO、伪异步IO、NIO和AIO
名词解释:
BIO:同步阻塞式IO,服务器端与客户端通过三次握手后建立连接,连接成功,双方通过I/O进行同步阻塞式通信。
弊端:1,读和写操作是同步阻塞的,任何一端出现网络性能问题,都会影响另一方。2,一个链路建立一个线程,无法满足高并发,高性能需求。
伪异步IO:为了解决同步阻塞式IO一个链路建立一个线程的弊端,出现了伪异步IO,伪异步IO其实就是通过线程池/队列来处理多个客户端的接入,通过线程池可以灵活的调配线程资源,设置线程最大值,防止海量并发接入导致线程耗尽。
弊端:1,读和写操作是同步阻塞的,任何一端出现网络性能问题,都会影响另一方
非阻塞IO:nio类库是jdk1.4中引入的,它弥补了同步阻塞IO的不足,它在Java提供了高速的,面向块的I/O。同步阻塞IO是以流的方式处理数据,而NIO是以块的方式处理数据。面向流的I/O通常比较慢, 按块处理数据比按(流式的)字节处理数据要快得多。
AIO:异步非阻塞I/O,NIO2的异步套接字通道时真正的异步非阻塞I/O,它对应unix网络驱动中的事件驱动I/O,它不需要通过多路复用器对注册的通道进行轮询操作即可实现异步读写,简化了NIO编程模型。
NIO:全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。
补充:
NIO有哪些框架?
Netty,Mina,Grizzly
为什么选择netty?
Netty 是业界最流行的NIO框架之一,它的健壮性,性能,可定制性,可扩展性在同类框架中都是屈指一数的,并且它已经得到很多商用项目的验证。
Netty优点有哪些?
API使用简单,开发门槛低。
功能强大,预置多种编解码器,支持多种主流协议。
定制能力强,可以通过channelhandler对通信框架进行灵活的扩展。
性能好。
社区活跃,版本迭代周期短。
经历了大规模的商业项目的验证。在互联网,大数据,网络游戏,企业应用,电信软件等众多行业得到成功商用,证明了它完全可以满足不同行业的商业应用。