Netty的核心组件

Netty的核心组件

 

Netty的核心组件

Channel ;

Channel 是 Java NIO 的一个基本构造。
它代表一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执
行一个或者多个不同的I/O操作的程序组件)的开放连接,如读操作和写操作
目前,可以把 Channel 看作是传入(入站)或者传出(出站)数据的载体。因此,它可以
被打开或者被关闭,连接或者断开连接。

回调;

一个回调其实就是一个方法,一个指向已经被提供给另外一个方法的方法的引用。这使得后者可以在适当的时候调用前者。回调在广泛的编程场景中都有应用,而且也是在操作完成后通知相关方最常见的方式之一。
Netty 在内部使用了回调来处理事件; 当一个回调被触发时, 相关的事件可以被一个ChannelHandler 的实现处理

Future ;

Future 提供了另一种在操作完成时通知应用程序的方式。这个对象可以看作是一个异步操
作的结果的占位符;它将在未来的某个时刻完成,并提供对其结果的访问。

JDK 预置了 interface java.util.concurrent.Future,但是其所提供的实现,只
允许手动检查对应的操作是否已经完成, 或者一直阻塞直到它完成。 这是非常繁琐的, 所以 Netty
提供了它自己的实现——ChannelFuture,用于在执行异步操作的时候使用。

ChannelFuture提供了几种额外的方法,这些方法使得我们能够注册一个或者多个
ChannelFutureListener实例。监听器的回调方法operationComplete(),将会在对应的
操作完成时被调用。然后监听器可以判断该操作是成功地完成了还是出错了。如果是后者,我
们可以检索产生的Throwable。简而言之,由ChannelFutureListener提供的通知机制消除
了手动检查对应的操作是否完成的必要。

事件和 ChannelHandler

Netty 使用不同的事件来通知我们状态的改变或者是操作的状态。这使得我们能够基于已经
发生的事件来触发适当的动作。这些动作可能是

    •  记录日志;
    •  数据转换;
    •  流控制;
    •  应用程序逻辑。

Netty 是一个网络编程框架, 所以事件是按照它们与入站或出站数据流的相关性进行分类的。
可能由入站数据或者相关的状态更改而触发的事件包括:

    • 连接已被激活或者连接失活
    • 数据读取;
    • 用户事件;
    • 错误事件。


出站事件是未来将会触发的某个动作的操作结果,这些动作包括:

    • 打开或者关闭到远程节点的连接;
    • 将数据写到或者冲刷到套接字。 

 

每个事件都可以被分发给 ChannelHandler 类中的某个用户实现的方法。 这是一个很好的
将事件驱动范式直接转换为应用程序构件块的例子。下图展示了一个事件是如何被一个这样的
ChannelHandler 链处理的。

 

 

Netty 的 ChannelHandler 为处理器提供了基本的抽象,如图 1-3 所示的那些。我们会
在适当的时候对 ChannelHandler 进行更多的说明,但是目前你可以认为每个 Channel-
Handler 的实例都类似于一种为了响应特定事件而被执行的回调。
Netty 提供了大量预定义的可以开箱即用的 ChannelHandler 实现,包括用于各种协议
(如 HTTP 和 SSL/TLS)的 ChannelHandler。在内部,ChannelHandler 自己也使用了事件
和 Future,使得它们也成为了你的应用程序将使用的相同抽象的消费者。

 

摘自书籍 《Netty实战》

posted @ 2019-01-29 16:18 柴柴1226 阅读(...) 评论(...) 编辑 收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值