Netty学习(三)- Unsafe

目录

1.概览

1.1 介绍

2. 分析

2.1 Unsafe接口

 

2.2 Unsafe接口实现类

2.2.1 AbstractUnsafe

2.2.2 AbstractEpollUnsafe

2.2.3 EpollServerSocketUnsafe


1.概览

1.1 介绍

官方解释

Unsafe operations that should never be called from user-code. These methods are only provided to implement the actual transport, and must be invoked from an I/O thread except for the following methods:

这个接口的方法主要用来做实际传输的,并且必须被一个IO线程调用,不能被开发者调用。

2. 分析

2.1 Unsafe接口

    public interface Unsafe {
        Handle recvBufAllocHandle();
 
        SocketAddress localAddress();
 
        SocketAddress remoteAddress();
 
        void register(EventLoop var1, ChannelPromise var2);
 
        void bind(SocketAddress var1, ChannelPromise var2);
 
        void connect(SocketAddress var1, SocketAddress var2, ChannelPromise var3);
 
        void disconnect(ChannelPromise var1);
 
        void close(ChannelPromise var1);
 
        void closeForcibly();
 
        void deregister(ChannelPromise var1);
 
        void beginRead();
 
        void write(Object var1, ChannelPromise var2);
 
        void flush();
 
        ChannelPromise voidPromise();
 
        ChannelOutboundBuffer outboundBuffer();
    }

 

2.2 Unsafe接口实现类

刚才也说到了,Unsafe接口被作为Channel接口的内部接口,那要看Unsafe接口的具体实现就必须到Channel接口的各个实现类去看看。Channel接口的实现类相当多,从idea导出

AbstractChannel (io.netty.channel)
    AbstractEpollChannel (io.netty.channel.epoll)
        AbstractEpollServerChannel (io.netty.channel.epoll)
            EpollServerDomainSocketChannel (io.netty.channel.epoll)
            EpollServerSocketChannel (io.netty.channel.epoll)
        AbstractEpollStreamChannel (io.netty.channel.epoll)
            EpollSocketChannel (io.netty.channel.epoll)
            EpollDomainSocketChannel (io.netty.channel.epoll)
        EpollDatagramChannel (io.netty.channel.epoll)
    LocalChannel (io.netty.channel.local)
    AbstractHttp2StreamChannel (io.netty.handler.codec.http2)
        Http2StreamChannel in Http2MultiplexCodec (io.netty.handler.codec.http2)
    EmbeddedChannel (io.netty.channel.embedded)
    AbstractOioChannel (io.netty.channel.oio)
        AbstractOioByteChannel (io.netty.channel.oio)
            OioByteStreamChannel (io.netty.channel.oio)
                OioSocketChannel (io.netty.channel.socket.oio)
                                    RxtxChannel (io.netty.channel.rxtx)
                            AbstractOioMessageChannel (io.netty.channel.oio)
            OioSctpServerChannel (io.netty.channel.sctp.oio)
                            OioServerSocketChannel (io.netty.channel.socket.oio)
                            OioSctpChannel (io.netty.channel.sctp.oio)
                            OioDatagramChannel (io.netty.channel.socket.oio)
                    AbstractServerChannel (io.netty.channel)
        LocalServerChannel (io.netty.channel.local)
    AbstractNioChannel (io.netty.channel.nio)
        AbstractNioMessageChannel (io.netty.channel.nio)
            NioDatagramChannel (io.netty.channel.socket.nio)
            NioUdtAcceptorChannel (io.netty.channel.udt.nio)
                NioUdtByteAcceptorChannel (io.netty.channel.udt.nio)
                                    NioUdtMessageAcceptorChannel (io.netty.channel.udt.nio)
                                NioSctpChannel (io.netty.channel.sctp.nio)
            NioSctpServerChannel (io.netty.channel.sctp.nio)
            NioServerSocketChannel (io.netty.channel.socket.nio)
            NioUdtMessageConnectorChannel (io.netty.channel.udt.nio)
                NioUdtMessageRendezvousChannel (io.netty.channel.udt.nio)
                            AbstractNioByteChannel (io.netty.channel.nio)
            NioSocketChannel (io.netty.channel.socket.nio)
                            NioUdtByteConnectorChannel (io.netty.channel.udt.nio)
                ServerChannel (io.netty.channel)
    ServerSocketChannel (io.netty.channel.socket)
        EpollServerSocketChannel (io.netty.channel.epoll)
        OioServerSocketChannel (io.netty.channel.socket.oio)
        NioServerSocketChannel (io.netty.channel.socket.nio)
    ServerDomainSocketChannel (io.netty.channel.unix)
        EpollServerDomainSocketChannel (io.netty.channel.epoll)
    AbstractEpollServerChannel (io.netty.channel.epoll)
        EpollServerDomainSocketChannel (io.netty.channel.epoll)
        EpollServerSocketChannel (io.netty.channel.epoll)
    SctpServerChannel (io.netty.channel.sctp)
        OioSctpServerChannel (io.netty.channel.sctp.oio)
        NioSctpServerChannel (io.netty.channel.sctp.nio)
    AbstractServerChannel (io.netty.channel)
        LocalServerChannel (io.netty.channel.local)
    UdtServerChannel (io.netty.channel.udt)
        NioUdtAcceptorChannel (io.netty.channel.udt.nio)
            NioUdtByteAcceptorChannel (io.netty.channel.udt.nio)
            NioUdtMessageAcceptorChannel (io.netty.channel.udt.nio)
SctpChannel (io.netty.channel.sctp)
    NioSctpChannel (io.netty.channel.sctp.nio)
    OioSctpChannel (io.netty.channel.sctp.oio)
UnixChannel (io.netty.channel.unix)
    AbstractEpollChannel (io.netty.channel.epoll)
        AbstractEpollServerChannel (io.netty.channel.epoll)
            EpollServerDomainSocketChannel (io.netty.channel.epoll)
            EpollServerSocketChannel (io.netty.channel.epoll)
        AbstractEpollStreamChannel (io.netty.channel.epoll)
            EpollSocketChannel (io.netty.channel.epoll)
                            EpollDomainSocketChannel (io.netty.channel.epoll)
                        EpollDatagramChannel (io.netty.channel.epoll)
    DomainSocketChannel (io.netty.channel.unix)
        EpollDomainSocketChannel (io.netty.channel.epoll)
    ServerDomainSocketChannel (io.netty.channel.unix)
        EpollServerDomainSocketChannel (io.netty.channel.epoll)
DatagramChannel (io.netty.channel.socket)
    NioDatagramChannel (io.netty.channel.socket.nio)
    OioDatagramChannel (io.netty.channel.socket.oio)
    EpollDatagramChannel (io.netty.channel.epoll)
DuplexChannel (io.netty.channel.socket)
    DomainSocketChannel (io.netty.channel.unix)
        EpollDomainSocketChannel (io.netty.channel.epoll)
    AbstractEpollStreamChannel (io.netty.channel.epoll)
        EpollSocketChannel (io.netty.channel.epoll)
        EpollDomainSocketChannel (io.netty.channel.epoll)
    SocketChannel (io.netty.channel.socket)
        EpollSocketChannel (io.netty.channel.epoll)
        NioSocketChannel (io.netty.channel.socket.nio)
        OioSocketChannel (io.netty.channel.socket.oio)
UdtChannel (io.netty.channel.udt)
    NioUdtByteConnectorChannel (io.netty.channel.udt.nio)
        NioUdtByteRendezvousChannel (io.netty.channel.udt.nio)
    NioUdtMessageConnectorChannel (io.netty.channel.udt.nio)
        NioUdtMessageRendezvousChannel (io.netty.channel.udt.nio)
    UdtServerChannel (io.netty.channel.udt)
        NioUdtAcceptorChannel (io.netty.channel.udt.nio)
            NioUdtByteAcceptorChannel (io.netty.channel.udt.nio)
            NioUdtMessageAcceptorChannel (io.netty.channel.udt.nio)

选几个比较常用的Channel实现类看看对应的Unsafe接口实现。

2.2.1 AbstractUnsafe

AbstractUnsafe抽象类位于AbstractChannel内部。

看下它的方法

2.2.2 AbstractEpollUnsafe

AbstractEpollUnsafe是AbstractUnsafe的子类

2.2.3 EpollServerSocketUnsafe

EpollServerSocketUnsafe是AbstractEpollUnsafe的子类

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值