2012-03-26 112 views
3

我需要連接到服務器,我知道它將監聽端口。雖然可能需要一些時間才能運作。是否可以讓ClientBootstrap嘗試連接給定數量的嘗試或達到超時?Netty:ClientBootstrap連接重試

此刻,如果連接被拒絕,我會得到一個異常,但它應該嘗試在後臺連接,例如尊重「connectTimeoutMillis」引導選項。

回答

4

您需要手動待辦事項它,但那不是硬..

你可以做這樣的事情:

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); 
      } 
     } 
    } 
}); 
+0

我想這個代碼片段,它似乎創建大量線程。如果在嘗試使用引導進行重新連接之前將Thread.sleep(10 * 1000)和println放入,您可以看到多於一個線程正在打印該消息,並且所有這些線程都嘗試連接到服務器。我的代碼幾乎是相同的,除了Thread.sleep()之前,我嘗試重新連接,並且當它失敗連接幾次時,我可以看到,多個線程被創建,並且他們都嘗試連接。 這是我的代碼http://pastebin.com/9mzgVkRd – 2013-03-07 13:31:41