Channel、EventLoop和channelfuture
-
Channe接口:
基本的IO操作(bind()、connect()、read()、write())依赖于底层网络传输所提供的原语。
-
EventLoop接口
用于处理连接的生命周期中所发生的事件。
下面的内容原地请背出:- 一个EventLoopGroup包含一个或多个EventLoop;
- 一个EventLoop在他的生命周期内只和一个Thread绑定;
- 所有由EventLoop处理的IO事件都将在他专有的Thread上被处理;
- 一个Channel在他的生命周期内只注册一个EventLoop;
- 一个EventLoop可能会被分配给多个Channel。
-
ChannelFuture接口:
Netty中所有的操作都是异步的,一个操作可能不会立即返回,所以需要一种用于在之后确定其结果的方法。 ChannelFuture接口的addListenter()方法注册了一个ChannelFutureListener,以便在操作完成时得到通知。
ChannelHandler和ChannelPipeline
-
ChannelHandler接口:
是所有处理入站和出站数据的应用程序逻辑的容器。 -
ChannelPipeline接口:
当Channel被创建后,会被自动分配到它专属的pipeline中,过程如下,知识点要考的:- 一个ChannelInitializer的实现被注册到了ServerBootstrap中;
- 当ChannelInitializer.nitChannel()被调用时,ChannelInitializer将在pipeline中安装一组自定义的ChannelHandler;
- ChannelInitializer将自己从pipeline中移除。
注:ChannelHandle的工作便是使得事件流经Pipeline,当ChannelHandler被添加到pipeline时,它会被分配一个ChannelHandlerContext,主要用于写出站数据(客户端——服务端认为是出站)。
- 引导类
有两种类型的引导,一种用于客户端(Bootstrap),一种用于服务器(severBootstrap),之前我们使用过了。
服务器这边:
第一组只包含一个ServerChannel,代表服务器已经绑定到某个端口的正在监听的套接字;第二组包含所有已经创建的用来处理客户端连接的Channel。