2012-02-28 10 views
7

मेरा अभी तक जारी किया जाना डेल्फी 2010 एप्लिकेशन उपयोगकर्ताओं को अपनी फ़ाइलों को अपने सर्वर पर अपलोड करने की अनुमति देता है। "स्लाइस" (256KB प्रत्येक) डेल्फी 2010 का उपयोग कर अपलोड दिनचर्या को कैसे अनुकूलित करें?

  • प्रत्येक टुकड़ा के लिए, में

    1. स्प्लिट फ़ाइल सर्वर
    2. पर पोस्ट: अभी मैं HTTPS पोस्ट उपयोग कर रहा हूँ फ़ाइलें भेजने के लिए, (सरलीकृत) एल्गोरिथ्म मूल रूप से है

    यानी। एक 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 उपयोग कर रहा हूँ। मैं (एबी) ने अपने प्रोफाइलर का इस्तेमाल किया और अपलोड को नियमित रूप से बदलने के अलावा ऑप्टिमाइज़ करने के लिए बहुत कुछ नहीं बचा है।

    मैं भी उपयोग कर रहा हूँ बहु सूत्रण, और भले ही मैं अपना सर्वश्रेष्ठ किया था मेरी कोड अनुकूलन करने के लिए, मेरे मानक अभी भी मुझे बताओ मैं बेहतर कर सकते हैं (अन्य अच्छी तरह से अनुकूलित सॉफ्टवेयर है कि एक बहुत को प्राप्त कर देखते हैं !

    1. मैं समूहीकरण की कोशिश की: बेहतर समय ... के रूप में तेजी से लगभग दो बार के रूप में मेरे अपलोड दिनचर्या)

      मैं जानता हूँ कि यह अपने सर्वर की गलती नहीं है ... यहाँ विचारों कि मैं अभी भी पता लगाने की जरूरत है एक ही पोस्ट में स्लाइस, स्वाभाविक रूप से इसके परिणामस्वरूप प्रदर्शन में वृद्धि हुई (20-35%) लेकिन फिर से शुरू करने की क्षमता कम हो गई है।

    2. मैंने एसएफटीपी/एसएसएच का उपयोग करने के बारे में भी सोचा, लेकिन मुझे यकीन नहीं है कि यह तेज़ है या नहीं।

    3. पुन: अपलोड करने योग्य अपलोड को लागू करने के लिए वेब सॉकेट का उपयोग करें (जैसे this component), मुझे गति के बारे में निश्चित नहीं है।

    अब मेरा प्रश्न है: क्या मैं अपने अपलोड को तेज़ करने के लिए कुछ कर सकता हूं?

    1. शुरू करने योग्य अपलोड समर्थित है
    2. फास्ट: मैं, कि प्रदान की किसी भी सुझाव है कि मैं कमांडलाइन उपकरणों सहित, लागू कर सकते हैं (यदि लाइसेंस मुझे मेरे आवेदन के साथ यह जहाज के लिए अनुमति देता है) खुला रहा हूँ!
    3. उचित स्मृति उपयोग
    4. सुरक्षित &, लॉगिन/उपयोगकर्ता प्रमाणीकरण

    इसके अलावा अनुमति देने के प्रमुख सुरक्षा चिंताओं के, एफ़टीपी एक कुछ नहीं मैं लागू करना चाहते हैं होता है क्योंकि।

    बहुत बहुत धन्यवाद!

  • +1

    क्या स्थानांतरण डेटा संपीड़न/डिकंप्रेशन का उपयोग करता है? – mjn

    +0

    सर्वर की ओर क्या है? – kobik

    +0

    @mjn: हाँ (अपलोड किए जाने से पहले स्लाइस पहले से ही ज़िपित किए गए हैं + मैं इंडी के टीआईडी ​​कॉम्प्रेसरजेएलआईबी का उपयोग करता हूं) – TheDude

    उत्तर

    5

    मैं पूरी फाइल के लिए इसे एक ही TIdHTTP.Post() करने का सुझाव दूंगा। सर्वर पर कितने बाइट भेजे गए थे, इसका ट्रैक रखने के लिए आप TIdHTTP.OnWork... ईवेंट का उपयोग कर सकते हैं ताकि आप जान सकें कि आवश्यकता होने पर कहां से फिर से शुरू करना है। फिर से शुरू होने पर, आप TIdHTTP.Request.CustomHeaders प्रॉपर्टी का उपयोग कस्टम हेडर को शामिल करने के लिए कर सकते हैं जो उस सर्वर को बताता है जहां से आप फिर से शुरू कर रहे हैं, इसलिए यह नया डेटा स्वीकार करने से पहले अपनी पिछली फ़ाइल को specfiied ऑफसेट पर वापस रोल कर सकता है।

    +0

    यह बढ़िया है, मुझे नहीं पता था कि मैं एक पोस्ट फिर से शुरू कर सकता हूं। मुझे देखने दो कि मुझे यह अधिकार मिला है: PHP कोड में, मैं इसे जोड़ता हूं -> हेडर ('स्वीकृति-रेंज: बाइट्स'); और डेल्फी में यदि मैं इसे जोड़ता हूं (केवल एक उदाहरण): IdHTTP.Request.CustomHeaders.Add ('रेंज: बाइट्स = 5000-'); HTTP पोस्ट स्वचालित रूप से अतिरिक्त बाइट्स (रोल बैक) और 5000 वें बाइट से पिकअप को त्याग देगा, क्या यह सही है? – TheDude

    +0

    पिछले 'पोस्ट' को फिर से शुरू करने के लिए, आप 'टीस्ट्रीम' में पास कर सकते हैं जिसमें इसमें शेष डेटा है। लेकिन सर्वर को फिर से शुरू करने का समर्थन करना है और नए डेटा को मौजूदा फाइल में जोड़ना है, फाइल को ताज़ा ओवरराइट नहीं करना है। फिर से अपलोड करना मानक HTTP प्रोटोकॉल का हिस्सा नहीं है। 'स्वीकार्य-रेंज' प्रतिक्रिया शीर्षलेख और 'रेंज' अनुरोध शीर्षलेख केवल ** डाउनलोड ** के लिए है, ** ** ** अपलोड नहीं है। जब मैंने एक कस्टम हेडर का उल्लेख किया, तो मैं आपके स्वयं के डिज़ाइन के कस्टम 'एक्स -...' हेडर का जिक्र कर रहा था कि आपका PHP कोड देख सकता है, उदाहरण के लिए: 'एक्स-रेज़्यूमिंग-फ्रॉम: ...'। –

    +0

    या 'सामग्री-श्रेणी' शीर्षलेख, हालांकि आरएफसी 2616 सुझाव देता है कि आमतौर पर इसका उपयोग केवल प्रतिक्रियाओं में किया जाता है, अनुरोधों में नहीं। –

    संबंधित मुद्दे