さまざまな IP の GeoIP ロケーションを取得するスクリプトがあります。これは毎日実行され、検索する IP が約 50,000 になると予想されます。
GeoIP システムをセットアップしました。レポートごとに wget を 50,000 回実行する必要がないようにしたいだけです。
私が考えていたのは、wgetにURLとの接続を開く何らかの方法があるに違いないということです-その後、ipsを渡します。そうすれば、接続を再確立する必要はありません。
どんな助けでも大歓迎です。
一度に複数のアドレスを指定すると、連続するアドレスは同じ HTTP/1.1 ( ) サポート サーバーにwget
属し、は既に確立されている接続を再利用します。Connection: keep-alive
wget
コマンド ラインにリストするアドレスが多すぎる場合は、それらをファイルに書き込んで-i
/--input-file=
オプションを使用できます (また、UNIX の伝統に従って、-i-
/は--input-file=-
標準入力を読み取ります)。
wget
ただし、異なる呼び出し間で接続を維持する方法はありません。
プロセスを高速化するために、複数の入力ファイルに対して同時に wget を実行するスレッド化された Ruby スクリプトを作成することもできます。したがって、それぞれ 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 つの接続を使用して、ファイル内のすべてのアドレスをダウンロードします。次のコマンドは、50,000 個のファイルすべてをダウンロードするために、サーバーへの接続が 5 回しかないことを意味します。
./fetch.rb "list1.txt" "list2.txt" "list3.txt" "list4.txt" "list5.txt"
ファイルのリストを POST リクエストとして送信し、サーバーがファイルに関するデータを含むオブジェクトを返す小さなプログラムを (Java や C などで) 作成することもできます。遅すぎてもいけません。