3
我需要連接到服務器,我知道它將監聽端口。雖然可能需要一些時間才能運作。是否可以讓ClientBootstrap嘗試連接給定數量的嘗試或達到超時?Netty:ClientBootstrap連接重試
此刻,如果連接被拒絕,我會得到一個異常,但它應該嘗試在後臺連接,例如尊重「connectTimeoutMillis」引導選項。
我需要連接到服務器,我知道它將監聽端口。雖然可能需要一些時間才能運作。是否可以讓ClientBootstrap嘗試連接給定數量的嘗試或達到超時?Netty:ClientBootstrap連接重試
此刻,如果連接被拒絕,我會得到一個異常,但它應該嘗試在後臺連接,例如尊重「connectTimeoutMillis」引導選項。
您需要手動待辦事項它,但那不是硬..
你可以做這樣的事情:
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);
}
}
}
});
我想這個代碼片段,它似乎創建大量線程。如果在嘗試使用引導進行重新連接之前將Thread.sleep(10 * 1000)和println放入,您可以看到多於一個線程正在打印該消息,並且所有這些線程都嘗試連接到服務器。我的代碼幾乎是相同的,除了Thread.sleep()之前,我嘗試重新連接,並且當它失敗連接幾次時,我可以看到,多個線程被創建,並且他們都嘗試連接。 這是我的代碼http://pastebin.com/9mzgVkRd – 2013-03-07 13:31:41