1.what is netty ?
netty是jboss下的提供一个异步,事件驱动的网络应用框架,该框架极大简化了网络编程,并具备高性能,高可靠的优点。这里需要和NIO区分一下的是,NIO是基于异步的网络通信框架,而netty由于是基于NIO实现的,所以即能基于网络通信,而且可以用于网络应用的分层结构,也许这么说很抽象,但后续会基于NIO的零拷贝解释清楚。目前只需要知道netty是网络应用框架。
2.why should we use it?
如果我们基于传统的NIO来写一套TCP链接的网络编程,都需要:1.绑定地址,监听端口;2:建立链接,读取数据,返回数据;3:关闭链接。我们清楚一次链接的过程中创建线程和维护线程是一件很麻烦的事情,虽然可以使用线程池来管理,但在多线程并发的条件下,需要在多个链接下维护链接的可用性也是相当复杂。如果我们用netty框架则仅需要关注业务逻辑层次的代码。
3.how to use it?
首先我们需要了解一下netty的核心类:
1.bootstrap 初始化channel的辅助类,负责服务的初始化配置信息,在服务端和客户端分别有两个子类severbootstrap 和 clientbootstrap。
2.channel 这里可以理解成socket,但channel对socket底层做了修改,负责数据读写对象,在netty中称之为管道,channel由channelfactory创建。
下面几个不同的channel实现不同的工厂类:
tcp NIO : NioClientSocketChannelFactory and NioServerSocketChannelFactory
upd NIO : NioDatagramChannelFactory
tcp BIO : OioClientSocketChannelFactory and OioServerSocketChannelFactory
udp BIO : OioDatagramChannelFactory
3.buffer netty的缓冲类,但对NIObuffer做了修改,在网络层传输中实现了零拷贝。
4.Pipeline pipeline就是一个流式管道,每一个channel都对应着自己的一个pipeline,网络上接收和发送的数据,以及各种事件(channel连接, channel断开等)都在pipeline 里流动,pipeline里注册了0~N个handler,每个handler都有自己的序号.
下面我们附上一张官网的图,具体的实现我们将在下一章详细说明: