1

12,000のIPアドレスのデータベースを最も効率的に調べて、それらすべてでソケットをpingで開くにはどうすればよいですか?現在、私はこのように働いています:

  • リスト内のすべてのIPを取得します
  • すべてのIPについて、サーバーとのソケットを開き、サーバーからパケットを受信する新しいスレッドを開きます。
  • 新しいスレッドで、IPがオンラインになっている天気と、ソケットを開いたときに返される情報に基づいて情報を更新します。

私の現在のソリューションは機能します。データベースを一度通過するのに何年もかかります。私はデータベースを非常に高速に通過する方法を見つけようとしています。しかし、どこから始めればいいのかわかりません。どんな助けでもありがたいです、ありがとう!

編集:私はソケットを開いてTCPパケットを送信し、情報を保存しています。

4

1 に答える 1

2

これにはnetty(NIO)のようなものを使用してみてください。1つのスレッドで(何らかの理由で)すべてのIPにリクエストを分散し、他の1つのスレッドで返されるのを待つことができます。現在のアプローチでは、スレッドを使用してすべてのリモートホストの非同期応答を管理します。これは問題ないようで、機能しますが、待機するだけでスレッドを生成することは、これほど最適ではありません。多くの接続を開き、パケットを送信し、結果を待ち、OSに待機を管理させます。

予測できない時間がかかる同時計算を実行する場合は、複数のスレッドのみを使用してください。多くのソケットを開く、データを送信する、応答を待つなど、明確に定義されたタスクがある場合は、JavaでNIOフレームワークを使用します(通常、ここでは単一のスレッドで十分です)。

于 2013-02-09T17:03:57.257 に答える