zoukankan      html  css  js  c++  java
  • netty源码解析(4.0)-2 Chanel的接口设计

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

  • 相关阅读:
    重写MembershipProvider实现自己的身份验证
    重写MembershipProvider用于事务处理(一)
    ASP.NET 2.0中GridView无限层复杂表头的实现
    用好VS2005之扩展membership服务
    ASP.NET2.0角色控制和管理
    asp.net2.0自带的Provider源码下载
    ASP.NET2.0上传EXCEL文件到gridview中显示
    一次编辑GridView 的所有行
    重写MembershipProvider用于事务处理(二)
    创建表头固定,表体可滚动的GridView
  • 原文地址:https://www.cnblogs.com/brandonli/p/9919562.html
Copyright © 2011-2022 走看看