سؤال

أنا أكتب تطبيق C++ و ترغب في طلب عدة ملفات البيانات عبر HTTP الحصول على الطلب في وقت واحد ، حيث يجب أن ننظر إلى البدء (يجب أن يكون عبر منصة).

  1. تشغيل التطبيق
  2. إنشاء قائمة عناوين url { "http://host/file1.txt", "http://host/file2.txt", "http://host/file3.txt"}
  3. طلب جميع عناوين المواقع في وقت واحد وتحميل محتويات المتغيرات (لا أريد القرص يكتب).كل ملف حوالي 10kB من البيانات.

ما مكتبات هل يجب أن أستخدم ؟ libcurl?curlpp?دفعة اسيو?سوف تحتاج إلى لفة بلدي الخاصة خيوط المعالجة المتعددة إلى طلب جميع الملفات في وقت واحد ؟ هل هناك أسهل طريقة ؟

تحرير:سوف تحتاج إلى طلب حوالي 1000 الحصول على الطلبات في وقت واحد.على الأرجح سوف أفعل ذلك في دفعات (100 في وقت واحد ، وخلق المزيد من الاتصالات جعلت واحدة يتم الانتهاء).

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

المحلول

أنصح libcurl.انا لست على دراية به, ولكنه لا يملك متعددة واجهة لأداء متعددة في وقت واحد HTTP العمليات.

اعتمادا على ما حل تذهب مع انه من الممكن القيام إدخال/إخراج غير متزامن دون استخدام خاصية تعدد.المفتاح هو استخدام select(2) استدعاء النظام. select() يأخذ مجموعة من واصفات الملفات و يخبرك إذا كان أي منهم لديها بيانات متاحة.إذا فعلوا ذلك, ثم يمكنك المضي قدما إلى استخدام read(2) أو recv(2) عليها دون الحاجة إلى القلق حول حظر.

نصائح أخرى

متصفحات الويب في كثير من الأحيان الحفاظ على مجموعة من المواضيع عامل للقيام شعبية ، وتعيين شعبية لهم كما أنها أصبحت حرة.IIRC HTTP RFC لديه ما يقوله حول كيفية العديد من الاتصالات المتزامنة يجب عليك أن تجعل إلى نفس الملقم في نفس الوقت:الكثير من الوقاحة.

إذا كان العديد من الطلبات في نفس الخادم ، وأنها تدعم المحافظة على الحياة (التي الجميع تقريبا لا), ثم التي قد تكون أفضل من سلوك سبام مع طلبات متعددة في وقت واحد.الفكرة العامة هي أن استخدام إحدى اتصال TCP/IP على طلبات متعددة في سلسلة ، وبالتالي توفير المصافحة النفقات العامة.والنتيجة العملية في تجربة تنفيذ جافا HTTPConnection الطبقات ، هو أن أعرض علة خفية لا دائما تطهير الدولة بشكل صحيح عند إعادة استخدام اتصال طلب جديد ، و تنفق قدرا كبيرا من الوقت يحدق في تسجيل/الشم البيانات ;-)

libcurl بالتأكيد يدعم المحافظة على الحياة (تمكين افتراضيا ، على ما أظن).

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