zoukankan      html  css  js  c++  java
  • Netty ChannelFuture 监听三种方法

    以下是伪代码

    方法一

    前后代码省略
    //绑定服务器,该实例将提供有关IO操作的结果或状态的信息
    ChannelFuture channelFuture = bootstrap.bind();
    this.serverChannel = channelFuture.channel();
    
    //给cf 注册监听器,监控我们关心的事件
    channelFuture.addListener(new ChannelFutureListener() {
        @Override
        public void operationComplete(ChannelFuture future) throws Exception {
            if (future.isSuccess()) {
                logger.info("在" + future.channel().localAddress() + "上开启监听 成功");
                Instance nacos = nacosUtil.registerInstance();
            } else {
                logger.info("在" + future.channel().localAddress() + "上开启监听 失败");
            }
        }
    });

    方法二

    ChannelFuture f = bootstrap.connect();
    f.addListener(connectedListener);
    
    
    private GenericFutureListener<ChannelFuture> connectedListener = (ChannelFuture f) ->
    {
        final EventLoop eventLoop = f.channel().eventLoop();
        if (!f.isSuccess()) {
            logger.info("连接失败!在10s之后准备尝试重连! doConnect => {}:{}", host, port);
            eventLoop.schedule(() -> this.doConnect(), 10, TimeUnit.SECONDS); 
        } else {
            connectFlag = true;
            channel = f.channel();
            channel.closeFuture().addListener(closeListener);
    
            logger.info("连接成功: localAddress => {} remoteAddress => {}", f.channel().localAddress(), f.channel().remoteAddress()); 
        }
    }; 

    方法三

    //绑定服务器,该实例将提供有关IO操作的结果或状态的信息
    ChannelFuture channelFuture = bootstrap.connect(nettyHost, nettyPort);//.sync()去掉,不然就走不到下一行 ListennerClientReconnHeart 加不进去
    channelFuture.addListener(applicationContext.getBean(NettyClientReconnHeart.class));
    
    
    @Component
    public class NettyClientReconnHeart implements ChannelFutureListener {
    
        private final Logger logger = LoggerFactory.getLogger(LoggerConfig.NETTY_LOGGER);
    
        @Autowired
        private NettyClient nettyClient;
    
        @Override
        public void operationComplete(ChannelFuture channelFuture) throws Exception {
            if (!channelFuture.isSuccess()) {
                EventLoop loop = channelFuture.channel().eventLoop();
                logger.warn("客户端已启动,与服务端建立连接失败,10s之后尝试重连!");
                loop.schedule(() -> nettyClient.doConnect(), 10, TimeUnit.SECONDS);
            } else {
                logger.info("服务器连接成功");
            }
        }
    }
  • 相关阅读:
    IE6碰到的兼容问题小结
    Ueditor的asp版本,上传测试无问题
    localStorage存取json数据
    asp版 QQ登录 oauth2.0
    phoneGap API调用摄像头并上传图片
    ASP.NET Ajax 控件之应用一(CollapsiblePanelExtender控件的使用)
    web网页配色
    DispatcherTimer与Dispatcher小小应用
    小说ICommand
    例说INotifyPropertyChanged接口
  • 原文地址:https://www.cnblogs.com/vipsoft/p/14924157.html
Copyright © 2011-2022 走看看