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的输入输出事件
Netty的ChannelHandler提供了如图1.3中展示的handler的基本抽象。我们在适当的时候会更多地谈论到ChannelHandler,但是现在你可以认为每个handler实例就是一种响应某个具体event的callback。Netty提供了大量你可以马上拿来用的预定义handler,包括HTTP和SSL/TLS等协议的handler。在内部,ChannelHandler自己也用events和futures,和你的应用是同样抽象的消费者。