netty核心组件

来源:互联网 发布:c4d mac 编辑:程序博客网 时间:2024/05/08 19:37

netty核心组件

  • Channels
  • Callbacks
  • Futures
  • Events
  • handlers

Channels

一个Channel是java NIO的一个基本抽象。可以吧一个channel相称一个输入和输出数据的媒介,它可以被打开或者关闭。

Callbacks

一个callback就是一个方法,一个提供给另一个的方法的引用,这样可以让另一个方法在合适的时候来回调callback方法。

callbacks在很多情况下都被使用,是通知相关方某个操作完成的常用方法之一。

netty在处理事件时内部就使用了callback,当一个callback被触发,事件就会被ChannelHandler的接口处理。

例如

public class ConnectHandler extends ChannelInboundHandlerAdapter{    @Override     public void channnelActive(ChannelHandlerContext ctx)throws Exception{    System.out.println(ctx.channel().remoteAddress());    }}   

这就是当一个连接建立的时候channelActive被调用

Future

Future是callback的复杂方法,提供了另一个当操作完成时如何通知应用的方法。Netty有自己的ChannelFuture用于执行异步操作。

JDK 的java.util.concuurent.Future,但是这个接口实现只能手动检查操作是否完成,或者阻塞到操作完成。

ChannelFuture可以注册一个或多个ChannelFutureListener实例。监听这的callback方法在操作完成时被调用。

Events

Netty用细分的events来通知状态的变化或者操作的状况。这样就可以根据发生的events来触发合适的行为。
因为netty是网络编程框架,因此events按它们和输入或者输出数据流的关系来分类。可能被输入数据或者相关状态改变触发的events包括:
- 活跃或者停用连接
- 读书据
- 用户events
- 错误events

输出event则是会触发将来行为的操作的结果:
- 打开或者关闭到远程链接
- 写或者刷新数据到一个socket

Handlers

每一个event都可以被分配到一个用户实现的handler对象方法。

图1-3 经过一串ChannelHandler的输入输出事件
%20%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B%E7%BD%91netty-in-action
Netty的ChannelHandler提供了如图1.3中展示的handler的基本抽象。我们在适当的时候会更多地谈论到ChannelHandler,但是现在你可以认为每个handler实例就是一种响应某个具体event的callback。

Netty提供了大量你可以马上拿来用的预定义handler,包括HTTP和SSL/TLS等协议的handler。在内部,ChannelHandler自己也用events和futures,和你的应用是同样抽象的消费者。

1 0