Netty成长之路——Netty核心组件

概述

       Netty核心组件主要包括Channel、回调、Future、事件和ChannelHandler。这些组件代表了不同类型的构造、资源、逻辑以及通知。你应用程序就是使用它们来访问网络以及流经网络的数据。接下来,让我一一介绍每个组件。

1、Channel

    它是Java NIO的一个基本构造。它代表一个到实体的开放连接,如读操作和写操作。我们可以把它看作是一个传入或传出数据的载体。所以,它可以被打开或关闭,连接或断开。

2、回调

      回调就是一个方法,它是一个指向已经被提供给另外一个方法的方法的引用。这样后者可以在适当的时候调用前者。Netty的内部使用了回调来处理事件。如下代码示例。当一个回调被触发时,相关的事件可以被一个ChannelHandler的实现处理。当一个新的连接已经被建立时,ChannelHandler 的 channelActive()回调方法将会被调用,并将打印出一条信息。

public class ChannelHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelActive(ChannelHandlerContext ctx)
throws Exception {
System.out.println(
"Client " + ctx.channel().remoteAddress() + " connected");
  }
}

3、Future

      从我们对与Java并发包的了解,很显然,Future是一个异步操作。我们可以把它看作是一个操作结束后,需要异步通知时的异步操作占位符。它将在未来某一个时刻完成,并将其结果返回。

    回想一下,在Java并发包中,有Java.util.concurrent.Future这个东西。但是它所提供的实现,允许手动检查对应操作是否已经完成,或者一直阻塞直到完成。这是一个繁琐的过程。所以Netty提供了它自己的实现——ChannelFuture用于在执行异步操作的时候使用。另外,ChannelFuture还提供了几种额外的方法,这些方法使得我们能够注册一个或者多个ChannelFutureListener实例。监听器的回调方法operationComplete(),将会在对应的操作完成时被调用,然后监听器可以判断该方法是成功还是未成功。如果是后者,我们可以检索产生的Throwable。简而 言之 ,由ChannelFutureListener提供的通知机制消除了手动检查对应的操作是否完成的必要。

   Netty 完全是异步和事件驱动的。每个 Netty 的出站 I/O 操作都将返回一个 ChannelFuture;也就是说,它们都不会阻塞。例如如下代码所示。它实现了一个 ChannelFuture 作为一个 I/O 操作的一部分返回的例子。

Channel channel = ...;
ChannelFuture future = channel.connect(
new InetSocketAddress("192.168.0.1", 25));

这里,connect()方法将会直接返回,而不会阻塞,该调用将会在后台完成。这究竟什么时候会发生则取决于若干的因素,但这个关注点已经从代码中抽象出来了。因为线程不用阻塞以等待对应的操作完成,所以它可以同时做其他的工作,从而更加有效地利用资源。

4、事件和ChannelHandler

Netty 使用不同的事件来通知我们状态的改变或者是操作的状态。这使得我们能够基于已经 发生的事件来触发适当的动作。这些动作可能是:  记录日志; 数据转换; 流控制; 应用程序逻辑。 Netty 是一个网络编程框架,所以事件是按照它们与入站或出站数据流的相关性进行分类的。 如下图展示了一个事件是如何被一个这样的 ChannelHandler 链处理的。

流经 ChannelHandler 链的入站事件和出站事件

Netty 提供了大量预定义的可以开箱即用的 ChannelHandler 实现,包括用于各种协议 (如 HTTP 和 SSL/TLS)的 ChannelHandler。在内部,ChannelHandler 自己也使用了事件 和 Future,使得它们也成为了你的应用程序将使用的相同抽象的消费者。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快马扬鞭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值