【问题标题】:Netty: ClientBootstrap connect retriesNetty:ClientBootstrap 连接重试
【发布时间】:2012-03-26 21:50:58
【问题描述】:

我需要连接到一个服务器,我知道它会监听一个端口。尽管可能需要一些时间才能投入使用。是否可以让 ClientBootstrap 尝试连接给定次数或直到达到超时?

目前,如果连接被拒绝,我会收到异常,但它应该尝试在后台连接,例如通过尊重“connectTimeoutMillis”引导选项。

【问题讨论】:

    标签: java netty


    【解决方案1】:

    你需要手动完成,但这并不难..

    你可以这样做:

    final ClientBootstrap bs = new ClientBootstrap(...);
    final InetSocketAddress address = new InetSocketAddress("remoteip", 110);
    final int maxretries = 5;
    final AtomicInteger count = new AtomicInteger();
    bs.connect(address).addListener(new ChannelFutureListener() {
    
        public void operationComplete(ChannelFuture future) throws Exception {
            if (!future.isSuccess()) {
                if (count.incrementAndGet() > maxretries) {
                    // fails to connect even after maxretries do something
                } else {
                    // retry
                    bs.connect(address).addListener(this);
                }
            }
        }
    });
    

    【讨论】:

    • 我尝试了这段代码 sn-p,它似乎创建了很多线程。如果您在尝试使用引导程序重新连接之前放置 Thread.sleep(10*1000) 和 println,您会看到多个线程正在打印该消息,并且所有线程也都在尝试连接到服务器。在我尝试重新连接之前,除了 Thread.sleep() 之外,我的代码几乎相同,并且当它几次连接失败时,我可以看到创建了多个线程并且所有线程都在尝试连接。这是我的代码pastebin.com/9mzgVkRd
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多