Channel
Channel是Java NIO的一个基本构造
它代表一个到实体的开放连接,如读操作或写操作。这里实体指的是,一个硬件设备、一个文件、一个网络套接字或者一个能够执行一个或者多个不同的I/O操作的程序组件。
目前,Channel可以看作是传入(入站)或者传出(出站)数据的载体。因此,它可以被打开或者被关闭,连接或者断开连接。
回调
一个回调就是一个方法,一个指向已经被提供给另外一个方法的方法的引用。这使得接受回调的方法可以在适当的时候调用回调方法。
其实就是函数指针作为参数。
Future
Future提供了一种在操作完成时通知应用程序的方式。这个对象可以看作是一个异步操作的结果的占位符;它将在某个时刻完成,并提供对其访问结果。
Netty提供了自己的future实现——ChannelFuture,用于在执行异步操作的时候使用。每个Netty的出站I/O操作都会返回一个Channel,也就是说,它们都不会阻塞。Netty完全是异步和事件驱动的。
ChannelFuture提供了几种额外的方法,这些方法使得我们可以注册一个或者多个ChannelFutureListener实例。监听器的回调方法operationComplete(),将会在对应的操作完成时被调用。如此一来,便可以消除java并发包Future需要手动检查是否完成带来的繁琐操作。
ChannelFutureListener可以看作是回调的一个更精细的版本;回调和Future是相互补充的机制。
|
|
事件ChannelHandler
Netty使用不同的事件来通知状态的改变或者是操作的状态。
Netty是一个网络编程框架,所以事件是按照它们与入站或者出站数据流的相关性进行分类的。
由入站数据或者相关的状态更改而触发的事件,包括:
- 连接已被激活或者连接失活;
- 数据读取;
- 用户事件;
- 错误事件。
由出站事件是未来将会触发的某个动作的操作结果,包括
- 打开或者关闭到远程节点的连接;
- 将数据写或者冲刷到套接字。