现在我有顺序单线程算法,如下所示:
boolean conn = false;
for (InetSocketAddress addr : addrs) {
while (!conn) {
SocketChannel ch = SocketChannel.open();
ch.configureBlocking(true);
ch.socket().setTcpNoDelay(tcpNoDelay);
ch.socket().setKeepAlive(true);
try {
ch.socket().connect(addr, connTimeout);
conn = true;
....
}
catch (...) {
log("Not available: " + addr);
}
if (conn)
break;
}
}
但在某些情况下,我可能会有相当大的地址列表,可用地址可能在此列表的末尾 - 这将导致可用地址的缓慢发现,因为我需要逐个检查所有地址。
所以我的问题 - 如何实现将尝试连接到不同线程中的多个地址的算法,并在找到第一个可用地址后退出?
如果没有可用的地址,也应退出此算法。
任何想法如何编码?
答案 0 :(得分:0)
以非阻止模式执行所有连接,然后使用Selector
上的OP_CONNECT
查找连接何时以及是否成功。