سؤال

لي لم يتم الافراج عنهم بعد يتيح تطبيق دلفي 2010 للمستخدمين تحميل ملفاتهم إلى خوادمي.أنا الآن أستخدم HTTPS POST لإرسال الملفات، والخوارزمية (المبسطة) هي في الأساس:

  1. تقسيم الملف إلى "شرائح" (256 كيلو بايت لكل منها)
  2. لكل شريحة، قم بنشرها على الخادم

أي.لملف بحجم 1 ميجابايت:

--> Get Slice #1 (256KB)
--> Upload Slice #1 using TidHTTP.Post()

--> Get Slice #2 (256KB)
--> Upload Slice #2 using TidHTTP.Post()

--> Get Slice #3 (256KB)
--> Upload Slice #3 using TidHTTP.Post()

--> Get Slice #4 (256KB)
--> Upload Slice #4 using TidHTTP.Post()

أنا استخدم إندي 10.لقد استخدمت (ab) ملف التعريف الخاص بي مرارًا وتكرارًا ولم يتبق الكثير لتحسينه باستثناء تغيير روتين التحميل نفسه.

أنا أيضا أستخدم خيوط متعددة, ، وعلى الرغم من أنني بذلت قصارى جهدي لتحسين الكود الخاص بي، إلا أن معاييري لا تزال تخبرني أنه يمكنني القيام بعمل أفضل (هناك برامج أخرى محسنة بشكل جيد تحقق كثيراً توقيت أفضل...أسرع بمرتين تقريبًا من روتين التحميل الخاص بي!)

أعلم أن هذا ليس خطأ الخادم الخاص بي...إليك الأفكار التي مازلت بحاجة إلى استكشافها:

  1. لقد حاولت تجميع الشرائح في مشاركة واحدة، وبطبيعة الحال أدى ذلك إلى تعزيز الأداء (20-35%) ولكن تم الآن تقليل القدرة على الاستئناف.

  2. فكرت أيضًا في استخدام SFTP/SSH، لكنني لست متأكدًا مما إذا كان سريعًا.

  3. استخدم مقابس الويب لتنفيذ التحميل القابل للاستئناف (مثل هذا المكون)، ولست متأكدًا من السرعة أيضًا.

الآن سؤالي هو:هل هناك شيء يمكنني القيام به لتسريع عملية التحميل؟أنا منفتح على أي اقتراح يمكنني تنفيذه، بما في ذلك أدوات سطر الأوامر (إذا كان الترخيص يسمح لي بإرساله مع طلبي)، بشرط ما يلي:

  1. يتم دعم التحميل القابل للاستئناف
  2. سريع!
  3. استخدام معقول للذاكرة
  4. تأمين والسماح بمصادقة تسجيل الدخول/المستخدم

وأيضًا، نظرًا للمخاوف الأمنية الكبيرة، فإن FTP ليس شيئًا أرغب في تنفيذه.

شكرًا جزيلاً!

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

المحلول

أود أن أقترح القيام بواحدة TIdHTTP.Post() للملف بأكمله دون تقطيعه على الإطلاق.يمكنك استخدام ال TIdHTTP.OnWork... الأحداث لتتبع عدد وحدات البايت التي تم إرسالها إلى الخادم حتى تعرف من أين يمكنك الاستئناف إذا لزم الأمر.عند الاستئناف، يمكنك استخدام TIdHTTP.Request.CustomHeaders الخاصية لتضمين رأس مخصص يخبر الخادم بالمكان الذي تستأنف منه، حتى يتمكن من استرجاع الملف السابق إلى الإزاحة المحددة قبل قبول البيانات الجديدة.

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