質問

さまざまなIPのGeoIPロケーションを取得するスクリプトがあります。これは毎日実行され、ルックアップするのに約50,000 IPがあると予想されます。

GeoIPシステムをセットアップしています。レポートごとに50,000回wgetを実行する必要をなくしたいだけです。

私が考えていたのは、wgetでURLとの接続を開く方法があるはずです-そして、IPを渡すと、接続を再確立する必要がなくなります。

ご協力いただければ幸いです。

役に立ちましたか?

解決

サーバーをサポートする同じHTTP / 1.1( Connection:keep-alive )に属する連続したアドレスで wget に複数のアドレスを一度に与えると、 wget は、既に確立された接続を再利用します。

コマンドラインにリストするアドレスが多すぎる場合は、それらをファイルに書き込んで -i / -input-file = オプションを使用できます(そして、UNIXの伝統により、 -i- / -input-file =-は標準入力を読み取ります。)

ただし、異なる wget 呼び出し間で接続を保持する方法はありません。

他のヒント

スレッド化されたRubyスクリプトを記述して、複数の入力ファイルで同時にwgetを実行し、プロセスを高速化することもできます。したがって、10,000個のアドレスをそれぞれ含む5つのファイルがある場合、次のスクリプトを使用できます。

#!/usr/bin/ruby

threads = []

for file in ARGV
  threads << Thread.new(file) do |filename|
    system("wget -i #{filename}")
  end
end

threads.each { |thrd| thrd.join }

これらのスレッドはそれぞれ、1つの接続を使用してファイル内のすべてのアドレスをダウンロードします。次のコマンドは、サーバーへの5つの接続のみを意味し、50,000個のファイルをすべてダウンロードします。

./fetch.rb "list1.txt" "list2.txt" "list3.txt" "list4.txt" "list5.txt"

また、ファイルのリストをPOST要求として送信し、サーバーがそれらのデータを含むオブジェクトを返す小さなプログラム(JavaまたはCなど)を作成することもできます。遅すぎてもいけません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top