कोल्डफ्यूज़न में अनुरोध समय-समय पर आप जिस तरह से अपेक्षा करते हैं उसमें व्यवहार नहीं करते हैं। जिस तरह से यह प्रस्तुत किया गया है, आप कल्पना करेंगे कि एक वॉचडॉग है जो जांचता है कि आपका अनुरोध कब तक चल रहा है और अनुरोध समय समाप्ति के तुरंत बाद इसे मारता है। वास्तव में ऐसा प्रतीत होता है कि केवल कुछ टैग चलने पर ही सीएफ जांचता है कि अनुरोध का विलुप्त समय निर्धारित सीमा से अधिक है या नहीं। <cfoutput>
टैग्स में से एक है जहां यह जांचता है, यही कारण है कि आप अक्सर सीएफआउटपुट को इंगित करते हुए टाइमआउट से अधिक संदेश देखते हैं, भले ही आपको पता चले कि इसे निष्पादित करने में लंबा समय नहीं लग रहा है।
<cfsetting requesttimeout="5" enableCFoutputOnly="no" />
<!--- Looping with a condition <cfloop blamed --->
<cfset request.counter=0 />
<cfloop condition="true">
<cfset sleep(1000) />
<cfset request.counter=request.counter+1>
<cflog file="timeout" text="#request.counter#">
<cfif request.counter GT 8>
<cfbreak>
</cfif>
</cfloop>
<!--- Looping with an index, times out, naming CFLOOP as the offending tag --->
<cfloop index="foo" from="1" to="8">
<cfset sleep(1000) />
</cfloop>
<!--- Looping with an index, times out, naming CFOUTPUT as the offending tag --->
<cfloop index="foo" from="1" to="8">
<cfset sleep(1000) />
<cfoutput>Hello</cfoutput>
</cfloop>
<!--- Same loop, but in script. No timeout warning at all --->
<cfscript>
for(foo=1;foo<=8;foo++){
sleep(1000);
}
</cfscript>
<!--- Same loop, now with WriteOutput() called. Still no timeout --->
<cfscript>
for(foo=1;foo<=8;foo++){
sleep(1000);
writeoutput("tick...");
}
</cfscript>
उपरोक्त कोड अनुरोध समय के कुछ अजीब व्यवहार को दिखाता है। जैसा कि मार्क क्रुगर ने इंगित किया था, बाहरी संसाधन के लिए किसी भी कॉल का मतलब टाइमआउट के लिए कोई जांच नहीं होगा, और मेरा अनुमान है कि आपके स्वयं के तर्क को निष्पादित करने वाले स्क्रिप्ट के बड़े ब्लॉक भी चेक नहीं किए जाएंगे, जिससे अगले आउटपुट कथन को दोषी ठहराया जा सकेगा।
यदि आपको पता लगाने की आवश्यकता है कि कोड कहां लगी हुई है और टाइमआउट संदेश गलत जगह पर इंगित कर रहे हैं, तो मैं लंबे समय से चलने वाले कोड चलते समय सर्वर से स्टैक निशान को पकड़ने के लिए लॉगिंग या जेस्टैक का उपयोग करता हूं। कुछ स्टैक निशान कुछ सेकंड अलग करें, फिर कोड को करने के लिए Samurai के माध्यम से लॉग फ़ाइल चलाएं।
हेनरी ... आप अनंत लूप के अंदर क्या कर रहे हैं। वहां कुछ चीजें हैं जो ग्लोबल टाइमआउट (डीबी कॉल, एफटीपी, चीजें जिन्हें बाहरी संसाधनों की आवश्यकता होती है) पसंद करते हैं। –
दोस्तों ... यह प्रश्न CFTHREAD का कोई उल्लेख नहीं करता है ... सुनिश्चित नहीं है कि वह कहां से आ रहा है। –
@ मार्कक्रागर मैं कुछ नया लागू करने की प्रक्रिया में हूं। कोड अभी भी अस्थिर हैं। मैंने इसे सीएफएसक्रिप्ट में लिखा था और सीएफ के अनुरोध टाइमआउट द्वारा असीमित रूप से निष्पादित किए जाने वाले कोडों की अपेक्षा नहीं की थी। – Henry