1、Netty介绍
Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架;
提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
对比于BIO(Blocking I/O,阻塞IO),它的并发性能得到了很大提高。
提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。
Netty的优点
- 并发高
- 传输快
- 封装好
2、Netty的核心组件
为了后期更好地理解和进一步深入 Netty,有必要总体认识一下 Netty 所用到的核心组件以及它们在整个 Netty 架构中是如何协调工作的。
Nettty 有如下几个核心组件:
- Channel
- ChannelFuture
- EventLoop
- ChannelHandler
- ChannelPipeline
2.1 Channel
基础的IO操作,如绑定、连接、读写等都依赖于底层网络传输所提供的原语,
在Java的网络编程中,基础核心类是Socket,而Netty的Channel提供了一组API,极大地简化了直接与Socket进行操作的复杂性,
并且Channel是很多类的父类,如EmbeddedChannel、LocalServerChannel、NioDatagramChannel、NioSctpChannel、NioSocketChannel等。
2.2 ChannelFuture
Netty中的所有IO操作都是异步的,不会立即返回,需要在稍后确定操作结果。
因此Netty提供了ChannelFuture,其addListener方法可以注册一个ChannelFutureListener,当操作完成时,不管成功还是失败,均会被通知。
ChannelFuture存储了之后执行的操作的结果并且无法预测操作何时被执行,提交至Channel的操作按照被唤醒的顺序被执行。