2013-03-22 5 views
5

APE's mod_xsendfile does not work with CF9's jrun_iis6_wildcard.dll के बाद से, मुझे <cfcontent> का उपयोग करके सुरक्षित रूप से फ़ाइलों की सेवा करने के साथ छोड़ दिया गया है। समस्या यह है कि यदि फ़ाइल डाउनलोड बड़ा है, या कनेक्शन धीमा है, तो यह लंबे समय तक एक सीएफ अनुरोध को जोड़ देगा। हार्ड सीमा को लागू करने के तरीके के बिना, कोई भी फाइलों के साथ जुड़े सभी अनुरोधों के साथ सिद्धांत में सीएफ सर्वर को नीचे ला सकता है।सीएफकंटेंट सेवारत फाइलों के लिए कितने अनुरोध बंधे हैं इसका ट्रैक कैसे रखें?

मैंने <cfcontent file=""> से नीचे अतिरिक्त लॉगिंग/तर्क करने का प्रयास किया लेकिन मैंने देखा कि वे कभी नहीं पहुंचे और निष्पादित नहीं हुए।

<cfcontent file="test.mp3"> 

<!--- won't reach here ---> 
<cfdump output="console" var="#now()# download done!"> 

सीएफकंटेंट अनुरोधों को संभालने से सीएफ को कम करने से बचने के लिए कोई क्या कर सकता है?

अद्यतन: अच्छी खबर! CF10 works with APE's mod_xsendfile!

+2

कई साइट्स का उपयोग करने का एकमात्र विकल्प फ़ाइल को एक सुरक्षित अनुरोध के रूप में कॉपी करना है और आईआईएस को इसे प्रस्तुत करने दें और फिर इसे समय-समय पर साफ करें या जब उपयोगकर्ता का "सत्र" समाप्त हो जाए। – BKK

+0

@ बेनकोशी हम्म, सत्र समाप्त होने का मतलब यह नहीं है कि डाउनलोड समाप्त हो गया है। मुझे आश्चर्य है कि क्या होगा यदि यह अभी भी डाउनलोड हो रहा है। – Henry

+0

@ हेनरी, मैंने अभी एक अस्पष्ट रूप से एक रिपोर्ट के साथ अस्पष्ट रूप से समान प्रयोग किया है जो मुझे पता है धीमा है (इसमें मिनट लगते हैं) और सीएफकंटेंट। इरादा यह देखना था कि क्या होगा यदि उपयोगकर्ता ने रिपोर्ट लॉन्च की, घर चला गया, और अगले दिन एक्सेल फ़ाइल खोला। उस स्थिति में, भले ही सत्र का समय समाप्त हो गया हो, फ़ाइल उपलब्ध होगी। –

उत्तर

0

समाधान 1

यह देखते हुए कि आप बेकाबू कारकों (धागे कि मिल "अटक", सेवा/सर्वर बंद, आदि) तुम कर सकते हो की वजह से अत्यधिक एक 100% सही लेखा की संभावना नहीं हो जाएगा निम्नलिखित:

यदि आप केवल कुल अनुरोधों का ट्रैक रखना चाहते हैं तो आप फ़ाइल की सेवा शुरू करते समय एक अनुप्रयोग चर का उपयोग कर सकते हैं जो आप बढ़ते हैं। फिर जब सामग्री पूरी हो जाती है तो आप गिनती घटाते हैं। हालांकि, आप यह सुनिश्चित करने के लिए सीएफएलॉक का उपयोग करना चाहेंगे कि यह अद्यतन किसी भी मुद्दे का कारण नहीं बनता है।

यदि आप इसे किसी फ़ाइल में लॉग करना चाहते हैं तो आप एक ही काम कर सकते हैं लेकिन फिर भी यह सुनिश्चित करने के लिए कि आप फ़ाइल को पढ़ने/लिखने के अनुरोधों के साथ किसी भी मुद्दे में भाग नहीं लेते हैं, उसे एक सीएफएलॉक में लपेटें।

आप एसक्यूएल का उपयोग कर रहे आप फ़ाइलों को प्रतिनिधित्व करने के लिए एक मेज बना सकते हैं और प्रत्येक लाने के लिए एक रिकॉर्ड और उचित जानकारी

  • फ़ाइल नाम
  • थोड़ा हाँ के रूप में पूरा जोड़ देते हैं तो/कोई क्षेत्र गलत पर चूक
  • उपयोगकर्ता/ग्राहक की जानकारी
  • आरंभ तिथि/समय अब,
  • समाप्ति तिथि/समय डिफ़ॉल्ट शून्य पर करने के लिए,
  • स्थिति "चूक डाउनलोड करने "
  • किसी अन्य जानकारी

का उपयोग लौटे पहचान फ़ाइल cfcontent और फिर जब किया सही दिनांक/समय और स्थिति के साथ निर्दिष्ट आईडी वाला तालिका के लिए एक अद्यतन करना" सफलता "और करने के लिए पूरा हाँ ।

आतंक के दौरान आप "त्रुटि [संबंधित त्रुटि विवरण]" स्थिति को प्रतिबिंबित करने के लिए तालिका अपडेट कर सकते हैं और 1 तक पूरा कर सकते हैं। पूरा = 1 या शुद्ध करने के लिए कैचल अपडेट जोड़ने का बुरा विचार नहीं होगा अभिलेख उपलब्ध नहीं हैं (हो सकता है आवेदन onstartup के दौरान या समय की अवधि के बाद)

यह आपको कुल वर्तमान में लंबित अनुरोधों के लिए इस तालिका क्वेरी करने के लिए अनुमति देगा (और वे क्या कर रहे हैं, आदि)

हालांकि, उस केवल लंबे समय तक चलने वाले अनुरोधों के मुद्दे को संबोधित करता है।

समाधान 2

आदर्श रूप में इस मुद्दे को सुरक्षित रूप से फ़ाइल सामग्री वापस जाने के लिए है। इस पर निर्भर करता है कि फाइलें कितनी संवेदनशील हैं (उदा। पसंदीदा निजी लेकिन दुनिया के अंत नहीं होने पर) आप उन्हें उचित रूप से वेब सुलभ निर्देशिका में "कॉपी" कर सकते हैं लेकिन नाम के लिए यूयूआईडी का उपयोग कर सकते हैं। तो मान लीजिए कि यह Secret1.pdf है, आप फ़ाइल के साथ cfdirectory का उपयोग करके एक निर्देशिका बनाते हैं, फिर उसमें कॉपी किया जाता है। आपको कुछ ऐसा दे रहा है:

/files/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx/Secret1.pdf और फिर उस निर्देशिका पर रीडायरेक्ट करने के लिए करें।

फिर आप निर्धारित समय या गेटवे या किसी भी विधि को निर्धारित कर सकते हैं जो आप निर्धारित संख्याओं से पुरानी निर्देशिकाओं को शुद्ध करना पसंद करते हैं। जैसे निर्देशिका xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx को हटाने के लिए और उदाहरण के लिए अब से 30 मिनट की सभी फाइलें हैं।

+0

"फिर जब सामग्री पूरी हो जाती है तो आप गणना कम करते हैं" काम नहीं करता है "क्योंकि सीएफकंटेंट समाप्त होने पर सुनने का कोई तरीका नहीं है। – Henry

+0

अच्छा बिंदु। तो शायद समाधान 2 आपके लिए काम करेगा। –

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