سؤال

ولدي السيناريو الذي هو الحصول على مواقع GeoIP من مختلف السجون، يتم تشغيل هذا يوميا وانا ذاهب الى نتوقع أن يكون حول ~ 50،000 آي بي إس للبحث عن.

ولدي مجموعة نظام GeoIP يصل - أود فقط للقضاء على الحاجة إلى تشغيل مجلد مشترك 50،000 مرات في تقرير

وماذا كنت أفكر هو، يجب أن يكون هناك طريقة ما لديك مجلد مشترك فتح اتصال مع عنوان الموقع - ثم تمرير آي بي إس، وبهذه الطريقة لم يكن لديك لإعادة تأسيس الاتصال

وأي مساعدة سوف تكون محل تقدير كبير.

هل كانت مفيدة؟

المحلول

إذا كنت تعطي wget عدة عناوين في آن واحد، مع عناوين متتالية ينتمون إلى نفس HTTP / 1.1 (Connection: keep-alive) تدعم الخادم، وإعادة استخدام wget الاتصال التي أنشئت بالفعل.

وإذا كان هناك عدد كبير جدا من عناوين تدرج في سطر الأوامر، يمكنك كتابتها إلى ملف واستخدام الخيار -i / --input-file= (و، في تقليد UNIX، -i- / --input-file=- يقرأ اللغة الفصحى).

وهناك، مع ذلك، لا وسيلة للحفاظ على اتصال عبر الدعاء wget مختلفة.

نصائح أخرى

هل يمكن أيضا كتابة السيناريو روبي الخيوط لتشغيل مجلد مشترك على مدخلات عدة ملفات في وقت واحد لتسريع عملية حتى. حتى إذا كان لديك 5 ملفات تحتوي على 10000 عناوين لكل منهما، هل يمكن استخدام هذا البرنامج النصي:

#!/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 }

وكل من هذه المواضيع سوف تستخدم اتصال واحد لتحميل جميع العناوين في ملف. الأمر التالي ثم يعني الاتصالات سوى 5 إلى خادم لتحميل جميع الملفات 50000.

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

ويمكنك أيضا كتابة برنامج صغير (في جاوة أو C أو أيا كان) الذي يرسل قائمة الملفات كما طلب POST والملقم بإرجاع كائن مع بيانات عنهم. لا ينبغي أن تكون بطيئة للغاية سواء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top