netty的基本组件主要有
- Channel
- 回调
- Future
- 事件和ChannelHandle
1.Channel
Channel是JavaNIO的一个基本构造。
它代表一个到实体(入一个硬件设备,一个文件,一个网络套接字或者一个能够执行一个或者多个不同IO操作的程序组件)的开发连接,如读写和写操作。
目前,可以把Channel看作是传入(入站)或者传出(出站)数据的载体。因此,他可以被打开或者被关闭,连接或者断开连接。
2.回调
一个回调其实就是一个方法,一个纸箱已经被提供另外一个方式的方法引用,netty中使用了回调来处理事件;当一个回调被触发时,相关的事件可以被一个ChannelHandler处理。具体的回调实现及原理可以看看这篇博客点击打开链接
3.Future
Future提供了另外一种通知应用操作已经完成的方式。这个对象作为一个异步操作结果的占位符,它将在将来的某个时候完成并提供结果。
JDK 附带接口 java.util.concurrent.Future,但所提供的实现只允许您手动检查操作是否完成或阻塞了。这是很麻烦的,所以 Netty 提供自己了的实现,ChannelFuture,用于在执行异步操作时使用。
ChannelFuture 提供多个附件方法来允许一个或者多个 ChannelFutureListener实例。这个回调方法 operationComplete() 会在操作完成时调用。事件监听者能够确认这个操作是否成功或者是错误。如果是后者,我们可以检索到产生的Throwable。简而言之, ChannelFutureListener 提供的通知机制不需要手动检查操作是否完成的。
每个 Netty 的 outbound I/O 操作都会返回一个ChannelFuture;这样就不会阻塞。这就是 Netty 所谓的“自底向上的异步和事件驱动”。
4.事件和Handler
Netty 使用不同的事件来通知我们更改的状态或操作的状态。这使我们能够根据发生的事件触发适当的行为。
这些行为可能包括:
· 日志
· 数据转换
· 流控制
· 应用程序逻辑
由于 Netty是一个网络框架,事件很清晰的跟入站或出站数据流相关。因为一些事件可能触发传入的数据或状态的变化包括:
· 活动或非活动连接
· 数据的读取
· 用户事件
· 错误
· 出站事件是由于在未来操作将触发一个动作。这些包括:
· 打开或关闭一个连接到远程
· 写或冲刷数据到 socket
· 每个事件都可以分配给用户实现处理程序类的方法。这说明了事件驱动的范例可直接用程序构建块。