1_netty基础组件

Netty是一个异步的事件驱动网络应用框架。


1_netty基础组件_第1张图片

1. 核心组件

  • Channels
    Java NIO的一个基础构造。可以认为它就是入站或者出站的一个载体。因此,它可以被打开或者关闭,连接或者断开。
  • Callback
    也就是回调。这里的回调也就是一个方法,提供给其它方法作为一个参数。Netty在处理时间的时候使用到了callback。当一个callback触发时,相关的事件可以由ChannelHandler接口的实现类处理。代码如下:
public class ConnectHandler extends ChannelInboundHandlerAdapter {
  @Override
 public void channelActive(ChannelHandlerContext ctx)
                throws Exception {
      System.out.println(
               "Client " + ctx.channel().remoteAddress() + " connected");
  }
 }
  • Future
    Future提供了另外一种操作完成时通知应用的方式。Jdk提供的future只能允许你手动检查操作是否完成或者一直阻塞直到操作完成。所以Netty提供了自己的实现-ChannelFuture,用于异步操作。
    ChannelFuture提供了额外的方法允许我们注册一个或者多个ChannelFutureListener监听器实例。监听器的callback方法operationComplete()在操作完成时会被调用。
    内一个Netty的出站I/O操作都会返回一个ChannelFuture;意味着不会被阻塞。也就是勤勉说的,Netty完完全全就是一个异步事件驱动框架。
Channel channel = ...;
//非阻塞
//异步连接
ChannelFuture future = channel.connect(
          new InetSocketAddress("192.168.0.1",25));
Channel channel = ...;
//非阻塞
//异步连接
ChannelFuture future = channel.connect(
        new InetSocketAddress("192.168.0.1",25));
//注册一个ChannelFutureListener,一旦操作完成就会执行operationComplete
future.addListener(new ChannelFutureListener(){
  public void operationComplete(ChannelFuture future){
  //检查操作状态  
  if(future.isSuccess()){
      //如果操作成功,创建一个ByteBuf来保存数据
       ByteBuf buffer = Unpooled.copiedBuffer(
              "Hello",Charset.defaultCharset());
        //异步发送数据
        ChannelFuture wf = future.channel()
                        .writeAndFlush(buffer);
         ....
    }else{
        Throwable cause = future.cause();
        cause.printStackTrace();
    }
  }
})
  • Event 和handler

下图就是入站和出站的事件在ChannelHandlers中流向


1_netty基础组件_第2张图片

你可能感兴趣的:(1_netty基础组件)