netty 使用说明


netty 使用说明

        

                

                                 

相关jar包

           

        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.77.Final</version>
        </dependency>

         

                   

                                 

启动器类

    

AbstractBootstrap

public abstract class AbstractBootstrap<B extends AbstractBootstrap<B, C>, C extends Channel> implements Cloneable {
    private static final Entry<ChannelOption<?>, Object>[] EMPTY_OPTION_ARRAY = new Entry[0];
    private static final Entry<AttributeKey<?>, Object>[] EMPTY_ATTRIBUTE_ARRAY = new Entry[0];
    volatile EventLoopGroup group;
    private volatile ChannelFactory<? extends C> channelFactory;
    private volatile SocketAddress localAddress;
    private final Map<ChannelOption<?>, Object> options = new LinkedHashMap();
    private final Map<AttributeKey<?>, Object> attrs = new ConcurrentHashMap();
    private volatile ChannelHandler handler;


    AbstractBootstrap() {
    AbstractBootstrap(AbstractBootstrap<B, C> bootstrap) {


    public B group(EventLoopGroup group) {
    public B channel(Class<? extends C> channelClass) {
    public B channelFactory(io.netty.channel.ChannelFactory<? extends C> channelFactory) {
    public B handler(ChannelHandler handler) {
    public <T> B option(ChannelOption<T> option, T value) {
    public <T> B attr(AttributeKey<T> key, T value) {

    public B localAddress(SocketAddress localAddress) {
    public B localAddress(int inetPort) {
    public B localAddress(String inetHost, int inetPort) {
    public B localAddress(InetAddress inetHost, int inetPort) {

    public ChannelFuture bind() {
    public ChannelFuture bind(int inetPort) {
    public ChannelFuture bind(String inetHost, int inetPort) {
    public ChannelFuture bind(InetAddress inetHost, int inetPort) {
    public ChannelFuture bind(SocketAddress localAddress) {

    public B validate() {
    public ChannelFuture register() {

    public abstract B clone();
    public abstract AbstractBootstrapConfig<B, C> config();

    abstract void init(Channel var1) throws Exception;

    final ChannelHandler handler() {
    final SocketAddress localAddress() {
    final ChannelFuture initAndRegister() {
    final Map<AttributeKey<?>, Object> attrs() {
    final Map<ChannelOption<?>, Object> options() {
    final ChannelFactory<? extends C> channelFactory() {

    final Map<AttributeKey<?>, Object> attrs0() {
    final Map<ChannelOption<?>, Object> options0() {
    final Entry<ChannelOption<?>, Object>[] newOptionsArray() {
    final Entry<AttributeKey<?>, Object>[] newAttributesArray() {


    static Entry<ChannelOption<?>, Object>[] newOptionsArray(Map<ChannelOption<?>, Object> options) {
    static Entry<AttributeKey<?>, Object>[] newAttributesArray(Map<AttributeKey<?>, Object> attributes) {
    static <K, V> Map<K, V> copiedMap(Map<K, V> map) {
    static void setAttributes(Channel channel, Entry<AttributeKey<?>, Object>[] attrs) {
    static void setChannelOptions(Channel channel, Entry<ChannelOption<?>, Object>[] options, InternalLogger logger) {

    private B self() {
    private ChannelFuture doBind(final SocketAddress localAddress) {
    private static void setChannelOption(Channel channel, ChannelOption<?> option, Object value, InternalLogger logger) {
    private static void doBind0(final ChannelFuture regFuture, final Channel channel, final SocketAddress localAddress, final ChannelPromise promise) {

    public String toString() {


********
内部类:PendingRegistrationPromise

    static final class PendingRegistrationPromise extends DefaultChannelPromise {
        private volatile boolean registered;

        PendingRegistrationPromise(Channel channel) {
            super(channel);
        }

        void registered() {
        protected EventExecutor executor() {

           

Bootstrap:客户端启动器

public class Bootstrap extends AbstractBootstrap<Bootstrap, Channel> {
    private static final InternalLogger logger = InternalLoggerFactory.getInstance(Bootstrap.class);
    private static final AddressResolverGroup<?> DEFAULT_RESOLVER;
    private final BootstrapConfig config = new BootstrapConfig(this);
    private volatile AddressResolverGroup<SocketAddress> resolver;
    private volatile SocketAddress remoteAddress;

    public Bootstrap() {
    private Bootstrap(Bootstrap bootstrap) {


    public Bootstrap validate() {
    public Bootstrap clone() {
    public Bootstrap clone(EventLoopGroup group) {
    public Bootstrap resolver(AddressResolverGroup<?> resolver) {

    public Bootstrap remoteAddress(SocketAddress remoteAddress) {
    public Bootstrap remoteAddress(String inetHost, int inetPort) {
    public Bootstrap remoteAddress(InetAddress inetHost, int inetPort) {

    public ChannelFuture connect() {
    public ChannelFuture connect(String inetHost, int inetPort) {
    public ChannelFuture connect(InetAddress inetHost, int inetPort) {
    public ChannelFuture connect(SocketAddress remoteAddress) {
    public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) {

    public final BootstrapConfig config() {

    void init(Channel channel) {

    final SocketAddress remoteAddress() {
    final AddressResolverGroup<?> resolver() {

    private ChannelFuture doResolveAndConnect(final SocketAddress remoteAddress, final SocketAddress localAddress) {
    private ChannelFuture doResolveAndConnect0(final Channel channel, SocketAddress remoteAddress, final SocketAddress localAddress, final ChannelPromise promise) {
    private static void doConnect(final SocketAddress remoteAddress, final SocketAddress localAddress, final ChannelPromise connectPromise) {

    static {
        DEFAULT_RESOLVER = DefaultAddressResolverGroup.INSTANCE;
    }
}

        

ServerBootstrap:服务端启动器

public class ServerBootstrap extends AbstractBootstrap<ServerBootstrap, ServerChannel> {
    private static final InternalLogger logger = InternalLoggerFactory.getInstance(ServerBootstrap.class);
    private final Map<ChannelOption<?>, Object> childOptions = new LinkedHashMap();
    private final Map<AttributeKey<?>, Object> childAttrs = new ConcurrentHashMap();
    private final ServerBootstrapConfig config = new ServerBootstrapConfig(this);
    private volatile EventLoopGroup childGroup;
    private volatile ChannelHandler childHandler;

    public ServerBootstrap() {
    }


    public ServerBootstrap group(EventLoopGroup group) {
    public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) {
    public <T> ServerBootstrap childOption(ChannelOption<T> childOption, T value) {
    public <T> ServerBootstrap childAttr(AttributeKey<T> childKey, T value) {
    public ServerBootstrap childHandler(ChannelHandler childHandler) {

    public ServerBootstrap validate() {
    public ServerBootstrap clone() {

    public final ServerBootstrapConfig config() {

    final ChannelHandler childHandler() {
    final Map<ChannelOption<?>, Object> childOptions() {
    final Map<AttributeKey<?>, Object> childAttrs() {

    void init(Channel channel) {
    private ServerBootstrap(ServerBootstrap bootstrap) {


**********
内部类:ServerBootstrapAcceptor

    private static class ServerBootstrapAcceptor extends ChannelInboundHandlerAdapter {
        private final EventLoopGroup childGroup;
        private final ChannelHandler childHandler;
        private final Entry<ChannelOption<?>, Object>[] childOptions;
        private final Entry<AttributeKey<?>, Object>[] childAttrs;
        private final Runnable enableAutoReadTask;

        ServerBootstrapAcceptor(final Channel channel, EventLoopGroup childGroup, ChannelHandler childHandler, Entry<ChannelOption<?>, Object>[] childOptions, Entry<AttributeKey<?>, Object>[] childAttrs) {

        public void channelRead(ChannelHandlerContext ctx, Object msg) {
        public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {

        private static void forceClose(Channel child, Throwable t) {

         

                

                                 

线程组

      

                

           

EventExecutorGroup

public interface EventExecutorGroup extends ScheduledExecutorService, Iterable<EventExecutor> {

    boolean isShuttingDown();

    Future<?> terminationFuture();
    Future<?> shutdownGracefully();
    Future<?> shutdownGracefully(long var1, long var3, TimeUnit var5);

    EventExecutor next();
    Iterator<EventExecutor> iterator();

    Future<?> submit(Runnable var1);
    <T> Future<T> submit(Runnable var1, T var2);
    <T> Future<T> submit(Callable<T> var1);

    <V> ScheduledFuture<V> schedule(Callable<V> var1, long var2, TimeUnit var4);
    ScheduledFuture<?> schedule(Runnable var1, long var2, TimeUnit var4);
    ScheduledFuture<?> scheduleAtFixedRate(Runnable var1, long var2, long var4, TimeUnit var6);
    ScheduledFuture<?> scheduleWithFixedDelay(Runnable var1, long var2, long var4, TimeUnit var6);
}

          

EventLoopGroup

public interface EventLoopGroup extends EventExecutorGroup {

    EventLoop next();

    ChannelFuture register(Channel var1);
    ChannelFuture register(ChannelPromise var1);

}

          

NioEventLoopGroup

public class NioEventLoopGroup extends MultithreadEventLoopGroup {

    public NioEventLoopGroup() {
        this(0);
    }

    public NioEventLoopGroup(int nThreads) {
    public NioEventLoopGroup(ThreadFactory threadFactory) {

    public NioEventLoopGroup(int nThreads, ThreadFactory threadFactory) {
    public NioEventLoopGroup(int nThreads, Executor executor) {
    public NioEventLoopGroup(int nThreads, ThreadFactory threadFactory, SelectorProvider selectorProvider) {
    public NioEventLoopGroup(int nThreads, ThreadFactory threadFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory) {
    public NioEventLoopGroup(int nThreads, Executor executor, SelectorProvider selectorProvider) {
    public NioEventLoopGroup(int nThreads, Executor executor, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory) {
    public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory) {
    public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory, RejectedExecutionHandler rejectedExecutionHandler) {
    public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory, RejectedExecutionHandler rejectedExecutionHandler, EventLoopTaskQueueFactory taskQueueFactory) {
    public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, SelectorProvider selectorProvider, SelectStrategyFactory selectStrategyFactory, RejectedExecutionHandler rejectedExecutionHandler, EventLoopTaskQueueFactory taskQueueFactory, EventLoopTaskQueueFactory tailTaskQueueFactory) {


    public void setIoRatio(int ioRatio) {
    public void rebuildSelectors() {

    protected EventLoop newChild(Executor executor, Object... args) throws Exception {

         

                

                                 

channel 类型

    

常用channel类(4.1.77 oio不推荐使用)

                

NioSocketChannel:tcp客户端
NioServerSocketChannel:tcp服务端

NioDatagramChannel:udp客户端、服务端

NioSctpChannel:sctp客户端
NioSctpServerChannel:sctp服务端

          

              

                                 

配置参数

   

ChannelOption

public class ChannelOption<T> extends AbstractConstant<ChannelOption<T>> {
    private static final ConstantPool<ChannelOption<Object>> pool = new ConstantPool<ChannelOption<Object>>() {
        protected ChannelOption<Object> newConstant(int id, String name) {
            return new ChannelOption(id, name);
        }
    };

    public static final ChannelOption<ByteBufAllocator> ALLOCATOR = valueOf("ALLOCATOR");
    public static final ChannelOption<RecvByteBufAllocator> RCVBUF_ALLOCATOR = valueOf("RCVBUF_ALLOCATOR");
    public static final ChannelOption<MessageSizeEstimator> MESSAGE_SIZE_ESTIMATOR = valueOf("MESSAGE_SIZE_ESTIMATOR");
    public static final ChannelOption<Integer> CONNECT_TIMEOUT_MILLIS = valueOf("CONNECT_TIMEOUT_MILLIS");

    public static final ChannelOption<Integer> MAX_MESSAGES_PER_WRITE = valueOf("MAX_MESSAGES_PER_WRITE");
    public static final ChannelOption<Integer> WRITE_SPIN_COUNT = valueOf("WRITE_SPIN_COUNT");

    public static final ChannelOption<WriteBufferWaterMark> WRITE_BUFFER_WATER_MARK = valueOf("WRITE_BUFFER_WATER_MARK");
    public static final ChannelOption<Boolean> ALLOW_HALF_CLOSURE = valueOf("ALLOW_HALF_CLOSURE");
    public static final ChannelOption<Boolean> AUTO_READ = valueOf("AUTO_READ");
    public static final ChannelOption<Boolean> AUTO_CLOSE = valueOf("AUTO_CLOSE");

    public static final ChannelOption<Boolean> SO_BROADCAST = valueOf("SO_BROADCAST");
    public static final ChannelOption<Boolean> SO_KEEPALIVE = valueOf("SO_KEEPALIVE");
    public static final ChannelOption<Integer> SO_SNDBUF = valueOf("SO_SNDBUF");
    public static final ChannelOption<Integer> SO_RCVBUF = valueOf("SO_RCVBUF");
    public static final ChannelOption<Boolean> SO_REUSEADDR = valueOf("SO_REUSEADDR");
    public static final ChannelOption<Integer> SO_LINGER = valueOf("SO_LINGER");
    public static final ChannelOption<Integer> SO_BACKLOG = valueOf("SO_BACKLOG");
    public static final ChannelOption<Integer> SO_TIMEOUT = valueOf("SO_TIMEOUT");

    public static final ChannelOption<Integer> IP_TOS = valueOf("IP_TOS");
    public static final ChannelOption<InetAddress> IP_MULTICAST_ADDR = valueOf("IP_MULTICAST_ADDR");
    public static final ChannelOption<NetworkInterface> IP_MULTICAST_IF = valueOf("IP_MULTICAST_IF");
    public static final ChannelOption<Integer> IP_MULTICAST_TTL = valueOf("IP_MULTICAST_TTL");
    public static final ChannelOption<Boolean> IP_MULTICAST_LOOP_DISABLED = valueOf("IP_MULTICAST_LOOP_DISABLED");

    public static final ChannelOption<Boolean> TCP_NODELAY = valueOf("TCP_NODELAY");
    public static final ChannelOption<Boolean> TCP_FASTOPEN_CONNECT = valueOf("TCP_FASTOPEN_CONNECT");
    public static final ChannelOption<Integer> TCP_FASTOPEN = valueOf(ChannelOption.class, "TCP_FASTOPEN");

    public static final ChannelOption<Boolean> SINGLE_EVENTEXECUTOR_PER_GROUP = valueOf("SINGLE_EVENTEXECUTOR_PER_GROUP");

    public static <T> ChannelOption<T> valueOf(String name) {
    public static <T> ChannelOption<T> valueOf(Class<?> firstNameComponent, String secondNameComponent) {

    public static boolean exists(String name) {

    public void validate(T value) {
    private ChannelOption(int id, String name) {

                

                           

                                 

channel pipeline

        

通过channel接口获取对应的channel pileline,添加自定义的handler

                

          

ChannelInitailizer

@Sharable
public abstract class ChannelInitializer<C extends Channel> extends ChannelInboundHandlerAdapter {
    private static final InternalLogger logger = InternalLoggerFactory.getInstance(ChannelInitializer.class);
    private final Set<ChannelHandlerContext> initMap = Collections.newSetFromMap(new ConcurrentHashMap());

    public ChannelInitializer() {
    }

    protected abstract void initChannel(C var1) throws Exception;
                            //channel初始化

    public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
    public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {

    public final void channelRegistered(ChannelHandlerContext ctx) throws Exception {

    private boolean initChannel(ChannelHandlerContext ctx) throws Exception {
    private void removeState(final ChannelHandlerContext ctx) {

         

Channel

public interface Channel extends AttributeMap, ChannelOutboundInvoker, Comparable<Channel> {

    ChannelId id();
    EventLoop eventLoop();

    Channel parent();
    ChannelConfig config();

    boolean isOpen();
    boolean isRegistered();
    boolean isActive();
    boolean isWritable();

    long bytesBeforeUnwritable();
    long bytesBeforeWritable();

    SocketAddress localAddress();
    SocketAddress remoteAddress();

    ChannelFuture closeFuture();
    ChannelMetadata metadata();

    Channel.Unsafe unsafe();

    ChannelPipeline pipeline();    //获取channel pipeline

    ByteBufAllocator alloc();

    Channel read();
    Channel flush();

********
内部接口:Unsafe

    public interface Unsafe {

        Handle recvBufAllocHandle();

        SocketAddress localAddress();
        SocketAddress remoteAddress();

        void register(EventLoop var1, ChannelPromise var2);
        void deregister(ChannelPromise var1);

        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 beginRead();
        void write(Object var1, ChannelPromise var2);
        void flush();

        ChannelPromise voidPromise();

        ChannelOutboundBuffer outboundBuffer();
    }
}

          

ChannelPipeline

public interface ChannelPipeline extends ChannelInboundInvoker, ChannelOutboundInvoker, Iterable<Entry<String, ChannelHandler>> {

*******
add 操作

    ChannelPipeline addFirst(String var1, ChannelHandler var2);
    ChannelPipeline addFirst(EventExecutorGroup var1, String var2, ChannelHandler var3);

    ChannelPipeline addLast(String var1, ChannelHandler var2);
    ChannelPipeline addLast(EventExecutorGroup var1, String var2, ChannelHandler var3);

    ChannelPipeline addBefore(String var1, String var2, ChannelHandler var3);
    ChannelPipeline addBefore(EventExecutorGroup var1, String var2, String var3, ChannelHandler var4);

    ChannelPipeline addAfter(String var1, String var2, ChannelHandler var3);
    ChannelPipeline addAfter(EventExecutorGroup var1, String var2, String var3, ChannelHandler var4);

    ChannelPipeline addFirst(ChannelHandler... var1);
    ChannelPipeline addFirst(EventExecutorGroup var1, ChannelHandler... var2);

    ChannelPipeline addLast(ChannelHandler... var1);
    ChannelPipeline addLast(EventExecutorGroup var1, ChannelHandler... var2);


*******
remove 操作

    ChannelHandler remove(String var1);
    ChannelHandler removeFirst();
    ChannelHandler removeLast();

    ChannelPipeline remove(ChannelHandler var1);
    <T extends ChannelHandler> T remove(Class<T> var1);


*******
replace 操作

    ChannelPipeline replace(ChannelHandler var1, String var2, ChannelHandler var3);
    ChannelHandler replace(String var1, String var2, ChannelHandler var3);
    <T extends ChannelHandler> T replace(Class<T> var1, String var2, ChannelHandler var3);


*******
获取ChannelHandler

    ChannelHandler first();
    ChannelHandler last();
    ChannelHandler get(String var1);
    <T extends ChannelHandler> T get(Class<T> var1);

*******
获取ChannelHandlerContext

    ChannelHandlerContext firstContext();
    ChannelHandlerContext lastContext();

    ChannelHandlerContext context(ChannelHandler var1);
    ChannelHandlerContext context(String var1);
    ChannelHandlerContext context(Class<? extends ChannelHandler> var1);


*******
触发channel事件

    ChannelPipeline fireChannelRegistered();
    ChannelPipeline fireChannelUnregistered();

    ChannelPipeline fireChannelActive();
    ChannelPipeline fireChannelInactive();

    ChannelPipeline fireExceptionCaught(Throwable var1);
    ChannelPipeline fireUserEventTriggered(Object var1);

    ChannelPipeline fireChannelRead(Object var1);
    ChannelPipeline fireChannelReadComplete();
    ChannelPipeline fireChannelWritabilityChanged();


*******
其余操作

    Channel channel();      //获取pipeline对应的channel

    List<String> names();   //获取handler名称集合
    Map<String, ChannelHandler> toMap();  //获取handler及其对应的name

    ChannelPipeline flush(); //刷新pipeline
}

            

ChannelHandler

public interface ChannelHandler {

    void handlerAdded(ChannelHandlerContext var1) throws Exception;
    void handlerRemoved(ChannelHandlerContext var1) throws Exception;

    /** @deprecated */
    @Deprecated
    void exceptionCaught(ChannelHandlerContext var1, Throwable var2) throws Exception;

    @Inherited
    @Documented
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Sharable {
    }
}

          

ChannelHandlerContext

public interface ChannelHandlerContext extends AttributeMap, ChannelInboundInvoker, ChannelOutboundInvoker {

    String name();
    Channel channel();
    boolean isRemoved();

    EventExecutor executor();
    ChannelHandler handler();

    ByteBufAllocator alloc();
    ChannelPipeline pipeline();

    ChannelHandlerContext read();
    ChannelHandlerContext flush();

    ChannelHandlerContext fireChannelRegistered();
    ChannelHandlerContext fireChannelUnregistered();

    ChannelHandlerContext fireChannelActive();
    ChannelHandlerContext fireChannelInactive();

    ChannelHandlerContext fireExceptionCaught(Throwable var1);
    ChannelHandlerContext fireUserEventTriggered(Object var1);

    ChannelHandlerContext fireChannelRead(Object var1);
    ChannelHandlerContext fireChannelReadComplete();
    ChannelHandlerContext fireChannelWritabilityChanged();


    /** @deprecated */
    @Deprecated
    <T> Attribute<T> attr(AttributeKey<T> var1);

    /** @deprecated */
    @Deprecated
    <T> boolean hasAttr(AttributeKey<T> var1);
}

        

                  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值