Channel、EventLoop、ChannelFuture

本文详细介绍了Netty中的关键概念,包括Channel(类似于Socket,提供I/O操作)、EventLoop(处理连接事件的线程模型)和ChannelFuture(异步操作的通知接口)。每个Channel与一个EventLoop绑定,EventLoopGroup负责分配EventLoop给多个Channel。ChannelPipeline和ChannelHandlerContext用于管理和处理数据流。此外,ChannelHandler分为ChannelInboundHandler和ChannelOutboundHandler,分别处理入站和出站事件。ChannelHandlerContext提供方法来触发事件和在ChannelPipeline中进行交互。
摘要由CSDN通过智能技术生成

Channel、EventLoop(Group) 和ChannelFuture

  1. Channel—Socket;
  2. ChannelFuture—异步通知。
  3. EventLoop—控制、多线程处理、并发;

关系图:

关系说明

  • 一个EventLoopGroup 包含一个或者多个EventLoop;
  • 一个EventLoop 在它的生命周期内只和一个Thread 绑定;
  • 所有由EventLoop 处理的I/O 事件都将在它专有的Thread 上被处理;
  • 一个Channel 在它的生命周期内只注册于一个EventLoop;
  • 一个EventLoop 可能会被分配给一个或多个Channel。

1、Channel 接口

        基本的I/O 操作(bind()、connect()、read()和write())依赖于底层网络传输所提供的原语。在基于Java 的网络编程中,其基本的构造是class Socket。Netty 的Channel 接口所提供的API,被用于所有的I/O 操作。大大地降低了直接使用Socket 类的复杂性。此外,Channel 也是拥有许多预定义的、专门化实现的广泛类层次结构的根。

        每个Channel 都将会被分配一个ChannelPipeline 和ChannelConfig。ChannelConfig 包含了该Channel 的所有配置设置,并且支持热更新。由于Channel 是独一无二的,所以为了保证顺序将Channel 声明为java.lang.Comparable 的一个子接口。因此,如果两个不同的Channel 实例都返回了相同的散列码,那么AbstractChannel 中的compareTo()方法的实现将会抛出一个Error。

最重要Channel 的方法

  • eventLoop:返回分配给Channel 的EventLoop

  • pipeline:返回分配给Channel 的ChannelPipeline

  • isActive :如果Channel 是活动的,则返回true。活动的意义可能依赖于底层的传输。例如,一个Socket 传输一旦连接到了远程节点便是活动的,而一个Datagram 传输一旦被打开便是活动的。

  • localAddress: 返回本地的SokcetAddress

  • remoteAddress: 返回远程的SocketAddress

  • write: 将数据写到远程节点。这个数据将被传递给ChannelPipeline,并且排队直到它被冲刷

  • flush: 将之前已写的数据冲刷到底层传输,如一个Socket

  • writeAndFlush: 一个简便的方法,等同于调用write()并接着调用flush()

2、EventLoop和EventLoopGroup

        EventLoop 定义了Netty 的核心抽象,用于处理连接的生命周期中所发生的事件。io.netty.util.concurrent 包构建在JDK 的java.util.concurrent 包上。一个EventLoop 将由一个永远都不会改变的Thread 驱动,同时任务(Runnable 或者Callable)可以直接提交给EventLoop 实现,以立即执行或者调度执行,可以看作是一个线程

       根据配置和可用核心的不同,可能会创建多个EventLoop 实例用以优化资源的使用,并且单个EventLoop 可能会被指派用于服务多个Channel。Netty的EventLoop在继承了ScheduledExecutorService的同时,只定义了一个方法,parent()。在Netty 4 中,所有的I/O操作和事件都由已经被分配给了EventLoop的那个Thread来处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值