सहमत होना / विस्तार करना जो पहले ही कहा जा चुका है, मुझे नहीं लगता कि FastCGI समस्या का समाधान करेगा।
अमरीका की एक मूल जनजाति
अपाचे में प्रत्येक अनुरोध अनुरोध पूरा होने तक एक कार्यकर्ता थ्रेड का उपयोग करेगा, जो COMET अनुरोधों के लिए एक लंबा समय हो सकता है।
अजाक्सियन के इस लेख में अपाचे पर COMET का उपयोग करने का उल्लेख है, और यह मुश्किल है। समस्या PHP के लिए विशिष्ट नहीं है, और अपाचे पर उपयोग करने के लिए इच्छित किसी भी बैक-एंड CGI मॉड्यूल पर लागू होती है।
सुझाया गया समाधान 'ईवेंट' MPM मॉड्यूल का उपयोग करना था जो कि अनुरोधों को कार्यकर्ता थ्रेड्स में भेजने के तरीके को बदलता है।
यह एमपीएम HTTP में alive कीप जिंदा समस्या ’को ठीक करने की कोशिश करता है। क्लाइंट द्वारा पहला अनुरोध पूरा करने के बाद, ग्राहक कनेक्शन को खुला रख सकता है, और उसी सॉकेट का उपयोग करके आगे के अनुरोध भेज सकता है। यह टीसीपी कनेक्शन बनाने में साइनिफिगेंट ओवरहेड को बचा सकता है। हालांकि, अपाचे पारंपरिक रूप से क्लाइंट से डेटा की प्रतीक्षा में एक पूरी चाइल्ड प्रोसेस / थ्रेड रखता है, जो अपने स्वयं के नुकसान लाता है। इस समस्या को हल करने के लिए, यह MPM दोनों श्रवण सॉकेट्स को संभालने के लिए एक समर्पित थ्रेड का उपयोग करता है, और सभी सॉकेट जो कि कीप अलाइव राज्य में हैं
दुर्भाग्य से, यह या तो काम नहीं करता है, क्योंकि यह एक अनुरोध पूरा होने के बाद केवल 'स्नूज़' करेगा , ग्राहक से एक नए अनुरोध की प्रतीक्षा कर रहा है।
पीएचपी
अब, समस्या के दूसरे पक्ष पर विचार करते हुए, भले ही आप प्रति धूमकेतु अनुरोध पर एक थ्रेड को रखने के साथ समस्या को हल करते हैं, फिर भी आपको प्रति अनुरोध एक PHP थ्रेड की आवश्यकता होगी - यही कारण है कि FastCGI मदद नहीं करेगा।
आपको कंटीन्यूज़ जैसी कुछ चीज़ों की ज़रूरत होती है जो धूमकेतु के अनुरोधों को फिर से शुरू करने की अनुमति देती हैं जब वे जिस घटना से शुरू होते हैं, वह देखी जाती है। AFAIK, यह कुछ ऐसा नहीं है जो PHP में संभव है। मैंने इसे केवल जावा में देखा है - Apache Tomcat सर्वर देखें ।
संपादित करें:
एक ही सर्वर के पोर्ट 80 पर एक अपाचे सर्वर और एक धूमकेतु-सक्षम सर्वर (उदाहरण के लिए जेट्टी, जावा के लिए tomcat) दोनों को चलाने की अनुमति देने के लिए लोड बैलेंसर ( HAProxy ) का उपयोग करने के बारे में यहां एक लेख है ।