全名: 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线程中执行
 
 
 

netty源码解解析(4.0)-2 Chanel的接口设计的更多相关文章

  1. netty源码解解析(4.0)-10 ChannelPipleline的默认实现--事件传递及处理

    事件触发.传递.处理是DefaultChannelPipleline实现的另一个核心能力.在前面在章节中粗略地讲过了事件的处理流程,本章将会详细地分析其中的所有关键细节.这些关键点包括: 事件触发接口 ...

  2. netty源码解解析(4.0)-11 Channel NIO实现-概览

      结构设计 Channel的NIO实现位于io.netty.channel.nio包和io.netty.channel.socket.nio包中,其中io.netty.channel.nio是抽象实 ...

  3. netty源码解解析(4.0)-17 ChannelHandler: IdleStateHandler实现

    io.netty.handler.timeout.IdleStateHandler功能是监测Channel上read, write或者这两者的空闲状态.当Channel超过了指定的空闲时间时,这个Ha ...

  4. netty源码解解析(4.0)-18 ChannelHandler: codec--编解码框架

    编解码框架和一些常用的实现位于io.netty.handler.codec包中. 编解码框架包含两部分:Byte流和特定类型数据之间的编解码,也叫序列化和反序列化.不类型数据之间的转换. 下图是编解码 ...

  5. netty源码解解析(4.0)-20 ChannelHandler: 自己实现一个自定义协议的服务器和客户端

    本章不会直接分析Netty源码,而是通过使用Netty的能力实现一个自定义协议的服务器和客户端.通过这样的实践,可以更深刻地理解Netty的相关代码,同时可以了解,在设计实现自定义协议的过程中需要解决 ...

  6. netty源码解解析(4.0)-15 Channel NIO实现:写数据

    写数据是NIO Channel实现的另一个比较复杂的功能.每一个channel都有一个outboundBuffer,这是一个输出缓冲区.当调用channel的write方法写数据时,这个数据被一系列C ...

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

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

  8. netty源码解解析(4.0)-8 ChannelPipeline的设计

    io.netty.channel.ChannelPipeline   设计原理 上图中,为了更直观地展示事件处理顺序, 故意有规律地放置两种handler的顺序,实际上ChannelInboundHa ...

  9. netty源码解解析(4.0)-16 ChannelHandler概览

    本章开始分析ChannelHandler实现代码.ChannelHandler是netty为开发者提供的实现定制业务的主要接口,开发者在使用netty时,最主要的工作就是实现自己的ChannelHan ...

随机推荐

  1. [SoapUI] 从测试套件,测试用例,测试步骤,测试数据各个级别控制是否执行

    自动保存 # -*- coding: utf-8 -*- import java.awt.Color import org.apache.poi.ss.usermodel.Cell import or ...

  2. linux 查看信息-磁盘分区&网络

    磁盘和分区 1.查看挂接的分区状态 2.查看所有交换分区 3.查看启动时IDE设备检测状况 网络 1.查看网络接口属性 2.查看防火墙设置 3.查看路由表 4.查看所有监听端口 5.查看所有已经建立的 ...

  3. flask更改已有的response

    今天遇到个问题,需要更改返回的response,但框架已经生成了一个response,所以需要直接更改. 试着找了找解决办法,最终解决方式如下: #下文中payload的类型是 # class Res ...

  4. fly插件飞向购物车

    首先载入jQuery库文件和jquery.fly.min.js插件. 插件官方: https://github.com/amibug/fly, 官方例子: http://codepen.io/hzxs ...

  5. ABP框架系列之一:(Entity-实体)

    Entities are one of the core concepts of DDD (Domain Driven Design). Eric Evans describe it as " ...

  6. SGU 176 Flow construction (有源有汇有上下界最小流)

    题意:给定 n 个点,m 条有向边,如果有向边的标号是1的话,就表示该边的上界下界都为容量 ,如果有向边的标号为0的哈,表示该边的下界为0,上界为容量 ,现在问,从 1 到 n 的最小流是多少,并输出 ...

  7. VIP之Switch

    Switch II 最大能连接12路输入与12路输出 不能合并数据数 每个输入可以驱动多个输出 每个输出只能被一个输入驱动 当输入没有连接到输出时,可以禁止掉 每个被禁止的输入可以设置成停止或者消耗模 ...

  8. 基于UML的毕业选题系统建模研究

    一.基本信息 标题:基于UML的毕业选题系统建模研究 时间:2018 出版源:电脑迷 领域分类:UML建模技术 二.研究背景 问题定义:为了加强学生设计分析开发软件的相关能力,有效避免结构化模型存在的 ...

  9. apache、nginx、tomcat配置方法

    https://www.cnblogs.com/chenmh/p/5121830.html

  10. IIS 设置文件传输大小限制

    IIS默认传输文件大小为30M,最大允许传输为2G. 1.通过webconfig配置节点设置 在IIS 6.0 设置如下配置节点: 但是IIS 7.0-8.0还要做添加如下配置节点才能正确,否则还是默 ...