通道Channel

Channel是Netty网络通信的主体,由它负责同对端进行网络通信、注册和数据操作等功能。

AbstractChannel是Channel的一个抽象类。

1) 通道状态主要包括:打开、关闭、连接
2) 通道主要的IO操作,读(read)、写(write)、连接(connect)、绑定(bind)。
3) 所有的IO操作都是异步的,调用诸如read,write方法后,并不保证IO操作完成,但会返回一个凭证,在IO操作成功,取消或失败后会记录在该凭证中。
4) channel有父子关系,SocketChannel是通过ServerSocketChannel接受创建的,故SocketChannel的parent()方法返回的就是ServerSocketChannel。
5) 在Channel使用完毕后,请调用close方法,释放通道占用的资源。

//返回全局唯一的channel id
    ChannelId id();
    //返回该Channel注册的线程模型,先理解为Ractor模型的Ractor线程。
    EventLoop eventLoop();
    //返回该Channel由谁创建的,ServerSocketChannel返回null,SocketChannel返回创建它的ServerSocketChannel
    Channel parent();
    //返回通道的配置信息
    ChannelConfig config();
    //通道是否打开
    boolean isOpen();
    //该通道是否已经注册在事件模型中,此处先参考Nio编程模型,一个通过需要注册在Register上
    boolean isRegistered();
    //通道是否激活
    boolean isActive();
    //通道是否支持 调用disconnect方法后,调用connect方法
    ChannelMetadata metadata();
    //返回绑定的地址,服务端的Channel返回监听的地址,而客户端的Channel返回连接到服务端的本地套接字。
    SocketAddress localAddress();
    //返回channel的远程套接字。
    SocketAddress remoteAddress();
    //通道的关闭凭证(许可),这里是多线程编程一种典型的设计模式,一个channle返回一个固定的
    ChannelFuture closeFuture();
    //是否可写,如果通道的写缓冲区未满,即返回true,表示写操作可以立即操作缓冲区,然后返回。
    boolean isWritable();
    Unsafe unsafe();
    //返回管道
    ChannelPipeline pipeline();
    //返回ByteBuf内存分配器
    ByteBufAllocator alloc();
    //诸如newPromise,newSuccessedFuture()方法,就是返回一个凭证,用来保存通知结果的
    ChannelPromise newPromise();
    ChannelProgressivePromise newProgressivePromise();
    ChannelFuture newSucceededFuture();
    ChannelFuture newFailedFuture(Throwable cause);
    ChannelPromise voidPromise();
    //绑定
    ChannelFuture bind(SocketAddress localAddress);
    //连接
    ChannelFuture connect(SocketAddress remoteAddress);
    ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress);
    //断开连接
    ChannelFuture disconnect();
    //关闭,释放通道资源
    ChannelFuture close();
    ChannelFuture deregister();
    ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise);
    ChannelFuture connect(SocketAddress remoteAddress, ChannelPromise promise);
    ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise);
    ChannelFuture disconnect(ChannelPromise promise);
    ChannelFuture close(ChannelPromise promise);
    ChannelFuture deregister(ChannelPromise promise);
    Channel read();
    ChannelFuture write(Object msg);
    ChannelFuture write(Object msg, ChannelPromise promise);
    Channel flush();
    ChannelFuture writeAndFlush(Object msg, ChannelPromise promise);
    ChannelFuture writeAndFlush(Object msg);
    interface Unsafe {
        RecvByteBufAllocator.Handle recvBufAllocHandle();
        ChannelHandlerInvoker invoker();
        SocketAddress localAddress();
        SocketAddress remoteAddress();
        void register(EventLoop eventLoop, ChannelPromise promise);
        void bind(SocketAddress localAddress, ChannelPromise promise);
        void connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise);
        void disconnect(ChannelPromise promise);
        void close(ChannelPromise promise);
        void closeForcibly();
        void deregister(ChannelPromise promise);
        void beginRead();
        void write(Object msg, ChannelPromise promise); 
        void flush();
        ChannelPromise voidPromise();
        //返回通道的环形缓存区
        ChannelOutboundBuffer outboundBuffer();
    }

Channel类图:

 

posted @ 2020-01-19 14:45  codedot  阅读(1126)  评论(0编辑  收藏  举报