netty源码解解析(4.0)-2 Chanel的接口设计
- 辅助方法。
- outbound方法
- inbound方法
方法
|
说明
|
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分配器。
|
方法
|
说明
|
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一样。
|
方法
|
说明
|
Channel read()
|
从channel中读取数据,把数据放到输入缓冲区中,然后触发ChannelInboundHandler#channelRead(ChannelHandlerContext, Object)和ChannelInboundHandler#channelReadComplete(ChannelHandlerContext)调用,如果之前已经有一个read操作正在执行或等待执行,这个方法不会有任何影响。
|
方法
|
说明
|
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的接口设计相关推荐
- netty源码解解析(4.0)-5 线程模型-EventExecutorGroup框架
上一章讲了EventExecutorGroup的整体结构和原理,这一章我们来探究一下它的具体实现. EventExecutorGroup和EventExecutor接口 io.netty.util.c ...
- netty源码解解析(4.0)-3 Channel的抽象实现
AbstractChannel和AbstractUnsafe抽象类 io.netty.channel.AbstractChannel 从本章开始,会有大量的篇幅涉及到代码分析.为了能够清晰简洁的地说明 ...
- Netty源码深度解析-ByteBuf(1) ByteBuf简介
导读 原创文章,转载请注明出处. 本文源码地址:netty-source-code-analysis 本文所使用的netty版本4.1.6.Final:带注释的netty源码 本文简要地介绍ByteB ...
- Netty 源码深度解析(九) - 编码
概述 一个问题 转载于:https://juejin.im/post/5bff467fe51d4555ed5a3111
- Netty 源码解析系列-服务端启动流程解析
netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...
- Netty源码解析之内存管理-PooledByteBufAllocator-PoolArena
PooledByteBufAllocator是Netty中比较复杂的一种ByteBufAllocator , 因为他涉及到对内存的缓存,分配和释放策略,PooledByteBufAllocator ...
- netty springmvc_springmvc源码架构解析之HandlerMapping
说在前面 前期回顾 sharding-jdbc源码解析 更新完毕 spring源码解析 更新完毕 spring-mvc源码解析 更新完毕 spring-tx源码解析 更新完毕 spring-boot源 ...
- php的setinc方法,thinkphp3.2.0 setInc方法 源码全面解析
搜索热词 我们先来看一下setInc的官方示例: 需要一个字段和一个自增的值(默认为1) 我们通过下面这个例子来一步步分析他的底层是怎么实现的: class TestController extend ...
- MKCMS米酷影视v7.0.0电影视频网站源码 附解析接口
又搞到好源码了,兄弟们!!这套源码是MKCMS米酷影视v7.0.0电影视频网站源码 附解析接口,更换搜狗mv,bilibili播放器,增加直播, 删除原优酷失效的分类.伪静态重新设置! 内附详细安装教 ...
最新文章
- SQL中object_id函数的用法
- SAP Analytics Cloud导入数据的规模限制
- Scala语言将加入宏指令
- Pycharm上Django的使用 Day8
- 71 include动作
- React和Vue的Chrome扩展工具安装
- java读取文件指定内容_Java读取文本指定的某一行内容
- HTML表格修改字段,HTML表格 – 更改列中单个单元格的宽度
- 汽车软件通信中间件iceoryx和它的零拷贝技术
- ajax 传实体对象,前端ajax或axios发送数据后端实体类接受(实例和报错原因)
- [ecshop 二次开发经验] ecshop 手机版本 购车流程 最后没有支付按钮 ,清理没有用的支付方式 68ecshop
- 对视频声音,音频进行音量标准化和响度均化,归一化的标准,原理以及具体操作
- less中的变量 单位问题
- 计算机网络安全概述(论文)
- windows触发器运行python脚本报错0x1问题解决办法
- Open GL 基础
- ipad一直显示连接app服务器出错,iPad显示无法连接到App Store怎么办 打开不了解决方法...
- (二)Linux ALSA 音频系统:逻辑设备篇
- 播放器/短视频 SDK 架构设计,点播服务 (Demo)
- STM32细节逻辑,relay的自适应
热门文章
- SAP成都研究院2018年年会之前的技术讲座
- SAP CRM的IOITF框架:Individual Object Integration Framework
- 你真的会用ABAP, Java和JavaScript里的constructor么?
- mysql抑音符_MySQL-数据类型
- php语言cookie,如何创建一个简单的PHP cookie语言切换?
- 电脑怎么python转行_零基础转行DA系列|一周Python for Data Science入门
- 支付宝支付回调是什么意思_支付宝邮箱是什么
- java小数点默认定义_java求两个数后小数点默认无限长度
- 大二上学期总结计算机专业,计算机学生的大二第二学期自我总结-自我总结
- python特性和属性的区别_什么是属性,什么是特性,有何不同?