netty源码解解析(4.0)-2 Chanel的接口设计
2018-11-06 23:09
1381 查看
全名: io.netty.channel.Channel
Channel内部定义了一个Unsafe类型,Channel定义了对外提供的方法,Unsafe定义了具体实现。我把Channel定义的的方法分为三种类型:
2. outbound方法
3. inbound方法
Unsafe接口定义
- 辅助方法。
- 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线程中执行 |
相关文章推荐
- Spring源码解析之IoC容器主要接口设计
- netty源码解解析(4.0)-1 核心架构
- Android设计模式源码解析之单例模式
- Android 源码设计模式解析与实战 第2版 读书笔记1.4.依赖倒置原则
- 有关SpringMVC的架构设计、源码解析、得失分析
- Android设计模式源码解析之外观模式(Facade)
- android源码设计模式解析与实战 读书笔记 2 单例模式(下)
- android源码设计模式解析与实战 笔记 3.7节
- NavigableSet接口源码解析
- Retrofit源码设计模式解析(下)
- 常见设计模式的解析和实现(C++)文档及源码打包下载
- android源码设计模式解析与实战 笔记 6.6节
- 聊聊高并发(三十八)解析java.util.concurrent各个组件(十四) 理解Executor接口的设计
- Android源码设计模式解析与实战阅读讨论
- caffe之python接口实战 :net_surgery 官方教程源码解析
- Queue接口源码解析
- netty源码分析之服务端启动全解析
- Jquery源码解析(jQuery的遍历结构设计)
- spring 源码解读与设计详解:6 BeanDefinitionParserDelegate与资源解析
- (随记五)Android设计模式解析与实战_面对对象六大原则之接口隔离原则