netty组件--Channel、EventLoop(Group)和 ChannelFuture

Channel、EventLoop(Group)和 ChannelFuture
Netty 网络抽象的代表:
Channel—Socket;
EventLoop—控制流、 多线程处理、 并发;
ChannelFuture—异步通知。
Channel 和 EventLoop 关系如图:

Channel 接口
基本的 I/O 操作(bind()、 connect()、 read()和 write()) 依赖于底层网络传输所提供的原
语。 在基于 Java 的网络编程中, 其基本的构造是类 Socket。 Netty 的 Channel 接口所提供
的 API, 被用于所有的 I/O 操作。 大大地降低了直接使用 Socket 类的复杂性。 此外, Channel
也是拥有许多预定义的、 专门化实现的广泛类层次结构的根。
由于 Channel 是独一无二的, 所以为了保证顺序将 Channel 声明为 java.lang.Comparable
的一个子接口。 因此, 如果两个不同的 Channel 实例都返回了相同的散列码, 那么
AbstractChannel 中的 compareTo()方法的实现将会抛出一个 Error。
Channel 的生命周期状态
ChannelUnregistered : Channel 已经被创建, 但还未注册到 EventLoop
ChannelRegistered : Channel 已经被注册到了 EventLoop
ChannelActive : Channel 处于活动状态(已经连接到它的远程节点) 。 它现在可以接
收和发送数据了
ChannelInactive : Channel 没有连接到远程节点
当这些状态发生改变时, 将会生成对应的事件。 这些事件将会被转发给 ChannelPipeline
中的 ChannelHandler, 其可以随后对它们做出响应。

最重要 Channel 的方法
eventLoop: 返回分配给 Channel 的 EventLoop
pipeline: 返回分配给 Channel 的 ChannelPipeline
isActive: 如果 Channel 是活动的, 则返回 true。 活动的意义可能依赖于底层的传输。
例如, 一个 Socket 传输一旦连接到了远程节点便是活动的, 而一个 Datagram 传输一旦被
打开便是活动的。
localAddress: 返回本地的 SokcetAddress
remoteAddress: 返回远程的 SocketAddress
write: 将数据写到远程节点。 这个数据将被传递给 ChannelPipeline, 并且排队直到它
被冲刷
flush: 将之前已写的数据冲刷到底层传输, 如一个 Socket
writeAndFlush: 一个简便的方法, 等同于调用 write()并接着调用 flush()
 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值