0
点赞
收藏
分享

微信扫一扫

netty之channel详解

静鸡鸡的JC 2022-04-04 阅读 66

文章目录

Channel

channel的主要作用
  • close():关闭channel
  • closeFuture():处理channel的关闭
    • sync 同步等待channel关闭
    • addListener 异步等待channel关闭
  • pipeline():添加处理器
  • write():将数据写入
  • writeAndFlush():将数据写入并刷出
channel异步连接处理–channelFuture
  1. 采用sync阻塞连接操作
        //方法1:使用sync方法同步处理结果
        channelFuture.sync(); // 阻塞方法 连接建立后 才向下运行
        Channel channel = channelFuture.channel();
        channel.writeAndFlush("123");
  1. 采用addListener异步执行后续操作
// 方法2: 使用addListener(callback)方法异步处理结果
        channelFuture.addListener(new ChannelFutureListener() {
            // 连接建立完成后,调用该方法
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                Channel channel = future.channel();
                log.debug("123");
                channel.writeAndFlush("123123123");
            }
        });
channel异步关闭处理–CloseFuture

与连接操作类似的:

  1. 采用sync阻塞
        // 1. 直接阻塞 同步操作
//        ChannelFuture channelFuture1 = channel.closeFuture();
//        channelFuture1.sync();
//        log.debug("close operation");
  1. 调用closeFuture异步执行后续操作
        // 2. 使用addListener
        ChannelFuture channelFuture1 = channel.closeFuture();
        channelFuture1.addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                log.debug("close operation");
            }
        });
优雅的关闭程序

当然是采用优雅的关闭:拒绝新的任务,发送完毕所有的数据之后再关闭线程。

        ChannelFuture channelFuture1 = channel.closeFuture();
        channelFuture1.addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                log.debug("close operation");
                group.shutdownGracefully();
            }
        });
举报

相关推荐

0 条评论