1

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

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

私が考えていたのは、wgetにURLとの接続を開く何らかの方法があるに違いないということです-その後、ipsを渡します。そうすれば、接続を再確立する必要はありません。

どんな助けでも大歓迎です。

4

3 に答える 3

2

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

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

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

于 2009-09-15T17:46:29.867 に答える
0

プロセスを高速化するために、複数の入力ファイルに対して同時に 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"
于 2009-09-15T18:53:56.643 に答える
0

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

于 2010-06-28T12:40:04.453 に答える