• 通道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类图:

  • 相关阅读:
    2020年终将过去
    Opus从入门到精通(一):简介
    0907 RTCP FB
    ClickHouse源码笔记6:探究列式存储系统的排序
    C++雾中风景17:模板的非推断语境与std::type_identity
    ClickHouse源码笔记5:聚合函数的源码再梳理
    ClickHouse源码笔记4:FilterBlockInputStream, 探寻where,having的实现
    ClickHouse源码笔记3:函数调用的向量化实现
    Doris开发手记1:解决蛋疼的MySQL 8.0连接问题
    声音克隆_论文翻译:2019_Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis
  • 原文地址:https://www.cnblogs.com/myitnews/p/12213637.html
Copyright © 2020-2023  润新知