全名: io.netty.channel.Channel
Channel内部定义了一个Unsafe类型,Channel定义了对外提供的方法,Unsafe定义了具体实现。我把Channel定义的的方法分为三种类型:
  • 辅助方法。
  • outbound方法
  • inbound方法
下面依次对这三种方法给予详细说明:
1. 辅助方法
方法
说明
EventLoop eventLoop()
得到EventLoop实例,每个Channel实例都会被注册到一个EventLoop中,这个EventLoop实例就是Channel注册的实例。
Channel parent()
得到父Channel实例。如: channelB = channelA.accept(), 那么channelA就是channelB的parent。
ChannelConfig config()
得到Channel实例的配置信息。
boolean isOpen()                                                                                      
channel是否处于open状态。netty为每个channel定义了四种状态open->registered->active->closed。一个新创建的channel处于open状态,随后他被注册到一个eventloop中它处于open+registered状态,当这个channel上的连接建立成功后它处于open+registered+active状态,被关闭后处于closed状态。
boolean isRegistered()
channel是否处于registered状态。
boolean isActive()
channel是否处于active状态。
SocketAddress localAddress()
channel的本地bind的地址。
SocketAddress remoteAddress()
channel连接的远程channel的地址。
boolean isWritable()
channel的I/O线程是否可以立即执操作。
Unsafe unsafe()
得到channel内部的Unsafe实例。
ChannelPipeline pipeline()
得到channel内部的ChannelPipeline实例。
ByteBufAllocator alloc()
channel持有的buffer分配器。
2. outbound方法
方法
说明
ChannelFuture bind(SocketAddress localAddress)
ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise)
让channel绑定的指定的本地地址(localAddress)上。这个方法会触发ChannelOutboundHandler#bind(ChannelHandlerContext, SocketAddress, ChannelPromise)方法的调用。
ChannelFuture connect(SocketAddress remoteAddress)
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress)
ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise)
连接到远程地址(remoteAddress), 这个方法会触发ChannelOutboundHandler#connect(ChannelHandlerContext, SocketAddress, SocketAddress, ChannelPromise)方法的调用。
ChannelFuture disconnect()
ChannelFuture disconnect(ChannelPromise promise);
断开连接, 这个方法会触发ChannelOutboundHandler#disconnect(ChannelHandlerContext, ChannelPromise)的调用。
ChannelFuture close()
ChannelFuture close(ChannelPromise promise)
关闭channel. 这个方法会触发ChannelOutboundHandler#close(ChannelHandlerContext, ChannelPromise)的调用。
ChannelFuture deregister()
ChannelFuture deregister(ChannelPromise promise)
从eventloop中注销这个channel,这个方法会触发ChannelOutboundHandler#deregister(ChannelHandlerContext, ChannelPromise)的调用。
ChannelFuture write(Object msg)
ChannelFuture write(Object msg, ChannelPromise promise)
向channel写入数据,这个操作不会导致真正写操作,只会把数据追加到输出缓冲区中。它会触发ChannelOutboundHandler#write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise)调用。
Channel flush()
对输出缓冲区中的数据执行真正的写操作,调用这个方法后连接的另一端才能收到write的数据,它会触发ChannelOutboundHandler#flush(ChannelHandlerContext ctx)调用。
ChannelFuture writeAndFlush(Object msg, ChannelPromise promise)
ChannelFuture writeAndFlush(Object msg)
效果和先调用write然后调用flush一样。
3. inbound方法
方法
说明
Channel read()                                                                                        
从channel中读取数据,把数据放到输入缓冲区中,然后触发ChannelInboundHandler#channelRead(ChannelHandlerContext, Object)和ChannelInboundHandler#channelReadComplete(ChannelHandlerContext)调用,如果之前已经有一个read操作正在执行或等待执行,这个方法不会有任何影响。
Unsafe接口定义
方法
说明
SocketAddress localAddress()
同Channel
SocketAddress remoteAddress()
同Channel
void register(EventLoop eventLoop, ChannelPromise promise)
同Channel,
void bind(SocketAddress localAddress, ChannelPromise promise)
同Channel, 必须在I/O线程中执行
void connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise)
同Channel, 必须在I/O线程中执行
void disconnect(ChannelPromise promise)
同Channel, 必须在I/O线程中执行
void close(ChannelPromise promise)
同Channel, 必须在I/O线程中执行
void closeForcibly()
立即关闭channel,并且不触发任何事件。
void deregister(ChannelPromise promise)
同Channel, 必须在I/O线程中执行
void beginRead()
为channel触发read事件做准备。如:把read事件注册到NIO 的selector上。 必须在I/O线程中执行 必须在I/O线程中执行
void write(Object msg, ChannelPromise promise)
同Channel, 必须在I/O线程中执行
void flush()
同Channel, 必须在I/O线程中执行
ChannelOutboundBuffer outboundBuffer()
得到channel的输出缓冲区,write的数据就是追加到这个缓冲区中。 必须在I/O线程中执行

转载于:https://www.cnblogs.com/brandonli/p/9919562.html

netty源码解解析(4.0)-2 Chanel的接口设计相关推荐

  1. netty源码解解析(4.0)-5 线程模型-EventExecutorGroup框架

    上一章讲了EventExecutorGroup的整体结构和原理,这一章我们来探究一下它的具体实现. EventExecutorGroup和EventExecutor接口 io.netty.util.c ...

  2. netty源码解解析(4.0)-3 Channel的抽象实现

    AbstractChannel和AbstractUnsafe抽象类 io.netty.channel.AbstractChannel 从本章开始,会有大量的篇幅涉及到代码分析.为了能够清晰简洁的地说明 ...

  3. Netty源码深度解析-ByteBuf(1) ByteBuf简介

    导读 原创文章,转载请注明出处. 本文源码地址:netty-source-code-analysis 本文所使用的netty版本4.1.6.Final:带注释的netty源码 本文简要地介绍ByteB ...

  4. Netty 源码深度解析(九) - 编码

    概述 一个问题 转载于:https://juejin.im/post/5bff467fe51d4555ed5a3111

  5. Netty 源码解析系列-服务端启动流程解析

    netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...

  6. Netty源码解析之内存管理-PooledByteBufAllocator-PoolArena

      PooledByteBufAllocator是Netty中比较复杂的一种ByteBufAllocator , 因为他涉及到对内存的缓存,分配和释放策略,PooledByteBufAllocator ...

  7. netty springmvc_springmvc源码架构解析之HandlerMapping

    说在前面 前期回顾 sharding-jdbc源码解析 更新完毕 spring源码解析 更新完毕 spring-mvc源码解析 更新完毕 spring-tx源码解析 更新完毕 spring-boot源 ...

  8. php的setinc方法,thinkphp3.2.0 setInc方法 源码全面解析

    搜索热词 我们先来看一下setInc的官方示例: 需要一个字段和一个自增的值(默认为1) 我们通过下面这个例子来一步步分析他的底层是怎么实现的: class TestController extend ...

  9. MKCMS米酷影视v7.0.0电影视频网站源码 附解析接口

    又搞到好源码了,兄弟们!!这套源码是MKCMS米酷影视v7.0.0电影视频网站源码 附解析接口,更换搜狗mv,bilibili播放器,增加直播, 删除原优酷失效的分类.伪静态重新设置! 内附详细安装教 ...

最新文章

  1. SQL中object_id函数的用法
  2. SAP Analytics Cloud导入数据的规模限制
  3. Scala语言将加入宏指令
  4. Pycharm上Django的使用 Day8
  5. 71 include动作
  6. React和Vue的Chrome扩展工具安装
  7. java读取文件指定内容_Java读取文本指定的某一行内容
  8. HTML表格修改字段,HTML表格 – 更改列中单个单元格的宽度
  9. 汽车软件通信中间件iceoryx和它的零拷贝技术
  10. ajax 传实体对象,前端ajax或axios发送数据后端实体类接受(实例和报错原因)
  11. [ecshop 二次开发经验] ecshop 手机版本 购车流程 最后没有支付按钮 ,清理没有用的支付方式 68ecshop
  12. 对视频声音,音频进行音量标准化和响度均化,归一化的标准,原理以及具体操作
  13. less中的变量 单位问题
  14. 计算机网络安全概述(论文)
  15. windows触发器运行python脚本报错0x1问题解决办法
  16. Open GL 基础
  17. ipad一直显示连接app服务器出错,iPad显示无法连接到App Store怎么办 打开不了解决方法...
  18. (二)Linux ALSA 音频系统:逻辑设备篇
  19. 播放器/短视频 SDK 架构设计,点播服务 (Demo)
  20. STM32细节逻辑,relay的自适应

热门文章

  1. SAP成都研究院2018年年会之前的技术讲座
  2. SAP CRM的IOITF框架:Individual Object Integration Framework
  3. 你真的会用ABAP, Java和JavaScript里的constructor么?
  4. mysql抑音符_MySQL-数据类型
  5. php语言cookie,如何创建一个简单的PHP cookie语言切换?
  6. 电脑怎么python转行_零基础转行DA系列|一周Python for Data Science入门
  7. 支付宝支付回调是什么意思_支付宝邮箱是什么
  8. java小数点默认定义_java求两个数后小数点默认无限长度
  9. 大二上学期总结计算机专业,计算机学生的大二第二学期自我总结-自我总结
  10. python特性和属性的区别_什么是属性,什么是特性,有何不同?