美文网首页
1_netty基础组件

1_netty基础组件

作者: loading_17 | 来源:发表于2018-06-13 16:49 被阅读0次

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


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基础组件

    Netty是一个异步的事件驱动网络应用框架。 1. 核心组件 ChannelsJava NIO的一个基础构造。可以...

  • Angular组件篇

    Angular组件 一:组件基础 1:什么是组件? 组件(Component)是构成Angular应用的基础和核心...

  • 组件化流程

    组件化创建大致步骤,以项目、基础组件为例 1、创建项目、基础组件远程仓库 创建项目远程仓库,基础组件远程仓库如下 ...

  • DataPicker

    Android基础:Date & Time组件(上)Android基础:Date & Time组件(下)

  • vue命名规范

    自用vue变量命名规范 props 驼峰式命名 事件 组件 组件文件 基础组件名 基础组件名 name Pasca...

  • 应用程序UI编程

    基础组件 基础内容组件 表单组件 微信小程序伸缩布局 视图容器 view scroll-viewswiper-view

  • Flutter - UI基础

    Flutter基础组件用Flutter构建漂亮的UI界面 - 基础组件篇Flutter滚动型容器组件 - List...

  • 组件化

    组件构成 基础组件(分类) 功能组件 业务组件 (骨架) 创建私有库

  • 组件化之路—集成组件SDK

    介绍 组件化的前提是要有基础组件、功能组件、业务组件这三大块。其中基础组件和功能组件都可以做成SDK,可以供其他A...

  • 远程私有库设计优化

    问题描述 : 一般我们在设计组件的时候分为基础组件 功能组件 业务组件 假如在基础组件中写的模块越来越多,那我们在...

网友评论

      本文标题:1_netty基础组件

      本文链接:https://www.haomeiwen.com/subject/tjjjeftx.html