2013-01-02 23 views
10

मैंने एक सर्वर भेजे गए इवेंट स्क्रिप्ट को PHP और थोड़ी देर के लूप के साथ स्थापित किया था, मैं नहीं चाहता था कि स्क्रिप्ट को बंद रखना पड़े और मुझे फिर से रुकना पड़े, इसलिए मैंने इसे थोड़ी देर में लूप में रखा।मैं PHP में सर्वर भेजे गए ईवेंट कैसे कार्यान्वित करूं?

मुद्दा यह था कि लिपि फंस रही थी और मुझे उस मार्ग को त्यागना पड़ा और मैं इसके बजाय node.js websocket बैकएंड के साथ गया।

मेरा सवाल यह है कि, यदि मैं कभी भी एक सर्वर भेजने की घटना php स्क्रिप्ट बनाने के लिए वापस गया, तो मैं इसे कैसे कार्यान्वित करूं?
while लूप इसे स्क्रिप्ट को लटकाते हुए प्रतीत नहीं करते हैं, और यदि यह सिर्फ दूसरे सेकेंड को कनेक्ट और डिस्कनेक्ट कर रहा है, तो यह लंबे मतदान से अलग नहीं है, तो मैं एक PHP स्क्रिप्ट कैसे बना सकता हूं जो लटका नहीं होगा, जबकि एसएसई संदेशों को भेजना?

+0

आप इसे लूप करने के लिए लूप में 'नींद()' डाल सकते हैं। – Musa

+0

@ मुसा मैंने ऐसा कोई फायदा नहीं हुआ। यह अभी भी लटका हुआ है। – Neal

+0

कोई विकल्प नहीं है? –

उत्तर

5

आपको PHP आउटपुट बफरिंग पर समस्या हो रही थी। अपने while पाश के अंत करने के लिए इन लाइन जोड़ने का प्रयास करें:

ob_flush(); 
flush(); 

यह आउटपुट बफरिंग अक्षम करना चाहिए।

EDIT आप सर्वर लोड को कम करने के लिए कुछ समय (यानी 10 मिनट) के बाद स्क्रिप्ट को भी समाप्त कर सकते हैं।

मैंने आपके लिए बहुत आसानी से ऐसा करने के लिए एक लाइब्रेरी बनाई है। इसे here देखें।

दूसरा संपादित करें क्या आपके पास nginx या वार्निश जैसी रिवर्स प्रॉक्सी है? यह कारण हो सकता है क्योंकि प्रॉक्सी आउटपुट की सामग्री को कैश करने की कोशिश करता है लेकिन एसएसई स्क्रिप्ट कभी समाप्त नहीं होती है जब तक कि आप इसे रोक नहीं देते हैं, इसलिए पूरी चीज लटकती है। आउटपुट को कैप्चर करने वाली अन्य चीजें में mod_deflate जैसे समान परिणाम हो सकते हैं।

तीसरा संपादित आप एक रिवर्स प्रॉक्सी है, तो आप SSE काम करने के लिए अनुमति देने के लिए कैशिंग बंद करने के लिए कोशिश कर सकते हैं।

आउटपुट बफरिंग को अक्षम करने के लिए PHP में एक और तरीके हैं। नीचे दिए गए कोड को देखें:

<?php 
for($i=0;$i<ob_get_level();$i++){ 
    ob_end_flush(); 
} 
@apache_setenv('no-gzip',1); 
@ini_set('implict_flush',1); 
ob_implict_flush(true); 
+1

यह एक ऐसे प्रश्न के अनुरूप है जो मैंने एक समान प्रश्न के लिए दिया था: http://stackoverflow.com/questions/7469396/how-to-implement-event-listening-in-php/8660897#8660897 – igorw

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