0

私は本当に基本的なクライアント<->サーバープロジェクトで遊んでいて、メインサーバーに到達できない場合はフォールバックシステムを実装するのがいいと思いました。私はこれを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レコードを設定しました、そしてそのすべて、コードはそれらをうまく検索します。私が知らないのは、レコードを適切に並べ替えたリストを作成した後、使用するレコードをどのように見つけることができるかということです。

優先度の最も低いレコードのホスト/ポートに接続するだけで、失敗した場合は次のレコードに移動できます。しかし、適切な量のレコードがあり、優先度の最も高いレコードの1つだけが機能した場合はどうでしょうか。クライアントを使用していた人は誰でも、優先度の低いレコード接続のそれぞれがタイムアウトするのを待ってから、最終的に機能するものを見つける必要があります。

私が探しているのは、ユーザーがおそらく年齢を待つ必要がないという点で、ホスト/ポートが機能しているレコードをシームレスに見つけることです。

4

1 に答える 1

0

別のスレッドで接続を開始し、接続が完了するまで待つことができます。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CompletionService.htmlの使用を検討してください

つまり、要するに:

  • 必要な値を返すためにcallableを実装する
  • 完了サービスを作成する
  • それに仕事を提出する
  • 呼び出しcompletionService.poll
  • 完了サービスのすべてのタスクをキャンセルします
于 2012-08-29T14:08:31.600 に答える