2010-11-21 18 views
16

कोई कैसे fastcgi_finish_request() समारोह का उपयोग करने पर एक सरल उदाहरण दिखा सकते हैं? मैंने googled लेकिन केवल कुछ सामान्य उल्लेख पाया, कुछ लोग कहते हैं कि वे इसे सफलतापूर्वक उपयोग करते हैं लेकिन मुझे कोड के साथ एक उदाहरण नहीं मिल सका।उदाहरण()

उदाहरण के लिए, मेरे पास एक PHP ऑब्जेक्ट है। ब्राउज़र पर प्रतिक्रिया भेजने के लिए मैं HTML उत्पन्न करता हूं, फिर इसे getResult() के माध्यम से वापस कर रहा है। फिर परिणाम गूंजें।

इस तरह

:

$obj = new controller(); 
echo $o->getResult(); 

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

मैं यह करने के बारे में कैसे जाउंगा? मैं समझता हूं कि मूल रूप से मैं fastcgi_finish_request(); पर कॉल कर सकता हूं और फिर php स्क्रिप्ट निष्पादित करना जारी रख सकता हूं।

मुझे बस उदाहरण कोड देखने की ज़रूरत है, मैं अपने आप को समझने के लिए पर्याप्त समझदार नहीं हूं।

+0

मुझे पता है कि php-fpm के साथ fastcgi के रूप में चलने वाले php की आवश्यकता है। मैंने पहले से ही इस तरह से सेटअप किया है, PHP सर्वर का उपयोग फास्टसीजी और लाइटटीपीडी वेब सर्वर के रूप में किया है। – Dmitri

उत्तर

35

मैं समझता हूं कि मूल रूप से मैं fastcgi_finish_request() को कॉल कर सकता हूं; और फिर PHP स्क्रिप्ट निष्पादित करना जारी रखें।

हां, आपको बस इतना करना है।

$obj = new controller(); 
echo $o->getResult(); 
fastcgi_finish_request(); 
do_facebook_thing(); 

खुद यह काम कर रहा है समझाने के लिए, ऐसा करते हैं:

echo "Test"; 
fastcgi_finish_request(); 
sleep(10); 

आप दूसरी पंक्ति को हटा दें, तो आप ब्राउज़र 10 सेकंड इंतजार करना पड़ता है कि देखेंगे।

+1

अच्छा उदाहरण। मैंने इसे आजमाया और यह काम आया। – Dmitri

+0

तो इसका उपयोग "पृष्ठभूमि नौकरी" करने के लिए एसिंच्रोन क्यूइंग के बजाय किया जा सकता है (उदाहरण के लिए ईमेल भेजें)? –

+1

@ थॉमसडेकॉक्स, यह हो सकता है, लेकिन यह कार्य अभी भी एक वेब प्रक्रिया पर हो रहा है जबकि वह कार्य चल रहा था। आखिरकार, उचित कतार का उपयोग करना उचित है जो वेब प्रक्रियाओं से पूरी तरह से अलग हो जाता है ताकि पेज को सेवा के लिए आवश्यक संचालन को अवरुद्ध न किया जा सके। – Matthew

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