Netty执行流程
- Server启动之后,Netty会从BossEventGroup选出一个NioEventLoop对指定的端口进行监听
- Client启动后,Netty从NioEventLoopGroup选一个NioEventLoop连接server,连接端口创建Channel
- 服务端从WorkerEventGroup中选择一个NioEventLoop与该channel绑定,之后操作所有与这个通道的操作
- 服务端处理客户端的数据,通过Pipeline中的处理器一次对数据进行处理。
Netty重要组件
- channel
这个是Nio的核心组件,用于连接IO设备,一个管道可以被打开也可以被关闭 - EventLoop和EventLoopGroup
是什么:EventLoop是Netty中的一个核心抽象,用来处理连接中所有事件。每一个Channel都会有一个EventLoop。就是一个线程,这个线程操作这个Channel的所有事件。 - ServerBootStrap和Bootstrap
Bootstarp 和 ServerBootstrap 被称为引导类,指对应用程序进行配置,并使他运行起来的过程。Netty处理引导的方式是使你的应用程序和网络层相隔离。
Bootstrap 是客户端的引导类,Bootstrap 在调用 bind()(连接UDP)和 connect()(连接TCP)方法时,会新创建一个 Channel,仅创建一个单独的、没有父 Channel 的 Channel 来实现所有的网络交换。
ServerBootstrap 是服务端的引导类,ServerBootstarp 在调用 bind() 方法时会创建一个 ServerChannel 来接受来自客户端的连接,并且该 ServerChannel 管理了多个子 Channel 用于同客户端之间的通信。 - ChannelHandler 与 ChannelPipeline
ChannelHandler 是对 Channel 中数据的处理器,这些处理器可以是系统本身定义好的编解码器,也可以是用户自定义的。这些处理器会被统一添加到一个 ChannelPipeline 的对象中,然后按照添加的顺序对 Channel 中的数据进行依次处理。 - ChannelFuture
Netty 中所有的 I/O 操作都是异步的,即操作不会立即得到返回结果,所以 Netty 中定义了一个 ChannelFuture 对象作为这个异步操作的“代言人”,表示异步操作本身。如果想获取到该异步操作的返回值,可以通过该异步操作对象的addListener() 方法为该异步操作添加监 NIO 网络编程框架 Netty 听器,为其注册回调:当结果出来后马上调用执行。
Netty 的异步编程模型都是建立在 Future 与回调概念之上的。