美文网首页
netty常用类及方法

netty常用类及方法

作者: 程序男保姆 | 来源:发表于2020-05-19 10:27 被阅读0次
  • NioEventLoopGroup 类似线程池

  • ServerBootstrap netty服务端的组件容器 用于把其他部分连接起来,使用的是建造者模式

  • NioServerSocketChannel nio服务端通道

  • InetSocketAddress jdk中绑定端口的inet类

  • ChannelInitializer 继承ChannelInboundHandlerAdapter

  • SocketChannel

  • ChannelPipeline

  • ChannelInboundHandlerAdapter channel入站适配器

  • ChannelOutboundHandlerAdapter channel出站适配器

  • Bootstrap netty客户端的组件容器 用于把其他部分连接起来,使用的是建造者模式

  • IdleStateHandler(0,0,5)

int readerIdleTimeSeconds, 读通道空闲时间
int writerIdleTimeSeconds, 写通道空闲时间
int allIdleTimeSeconds 全部通道空闲时间

使用时重写ChannelInboundHandlerAdapter中的 userEventTriggered方法

 /***
     * 心跳检测
     * 实现自定义userEventTrigger()方法,如果出现超时时间就会被触发,包括读空闲超时或者写空闲超时
     * READER_IDLE reader_idle 读通道处于空闲状态
     * WRITER_IDLE writer_idle 写通道处于空闲状态
     * ALL_IDLE    all_idle    全部通道
     *
     * @param ctx
     * @param evt
     * @throws Exception
     */
    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
        IdleStateEvent stateEvent = (IdleStateEvent) evt;

        switch (stateEvent.state()) {
            case READER_IDLE:
                handlerReaderIdle(ctx);
                break;
            case WRITER_IDLE:
                handlerWriterIdle(ctx);
                break;
            case ALL_IDLE:
                handlerAllIdle(ctx);
                break;
            default:
                break;
        }
    }

服务端方法

  • .group(bossGroup, workGroup) 绑定 bossGroup workGroup
  • .channel(NioServerSocketChannel.class) 设置处理handler
  • .localAddress(new InetSocketAddress(port)) 设置开启端口号
  • .childAttr() 设置attr
  • .childOption() 设置option
  • .childOptions() 批量设置option
  • .childHandler 设置子handler
  • .childHandler
.childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        public void initChannel(SocketChannel ch) {
                            ChannelPipeline pipeline = ch.pipeline();
                            // 服务端每10秒 检测一次读空闲
                            ch.pipeline().addLast(new IdleStateHandler(10,0,0));
                            ChannelUtil.buildChannelPipeline(pipeline);
                            // 添加具体handler
                            ch.pipeline().addLast(new ServerhandlerInIdle());
                            //ch.pipeline().addLast(new ServerHandlerInB());
                            //ch.pipeline().addLast(new ServerHandlerOutB());
                            //ch.pipeline().addLast(new ServerHandlerInC());
                            //ch.pipeline().addLast(new ServerHandlerOutC());
                        }
                    });
  • .addListener() 绑定监听

客户端方法

  • .channel(NioSocketChannel.class) 设置io 类型
  • .handler(new ChannelInitializer<SocketChannel>)设置handler
  • .connect(host, port) 绑定连接端口和host信息

部分结构图

  • channel handler 结构图


    image.png

相关文章

网友评论

      本文标题:netty常用类及方法

      本文链接:https://www.haomeiwen.com/subject/jhyvohtx.html