我正在玩一个非常基本的客户端< - >服务器项目以获得乐趣,并且如果主服务器无法访问,我认为实现回退系统会很好。我打算用SRV记录查找来做到这一点。
对于它的价值,这就是我获得SRV记录的方式..
String query = "_test._tcp.my.domain.com";
Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory");
environment.put("java.naming.provider.url", "dns:");
InitialDirContext dirContext = new InitialDirContext(environment);
Attributes records = dirContext.getAttributes(query, new String[] {"SRV"});
所以我设置了一些SRV记录,所有这些,代码检索它们都很好。我不知道的是,在构建了正确排序记录的列表后,如何找到要使用的记录?
我知道我可以连接到最低优先级记录的主机/端口,如果失败,转移到下一个,等等。但是如果有相当数量的记录并且只有一个具有最高优先级的记录会怎样工作?无论谁使用客户端,都必须等待每个优先级较低的记录连接超时,最后找到一个工作的连接。
我要做的是无缝地找到工作主机/端口的记录,因为用户不必等待可能的年龄。
答案 0 :(得分:0)
您可以在单独的线程中启动连接,只需等待一个完成。
请考虑使用http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CompletionService.html
简而言之: