2012-03-16 19 views
8

उम्मीद है कि मैं इसे अच्छी तरह से समझा सकता हूं। मैं ऑब्जेक्ट उन्मुख तरीके से PHP library to handle ajax requests through PHP बनाने पर काम कर रहा हूं। मैं वर्तमान में एक लंबे मतदान समाधान को लागू करने के लिए एक अच्छा तरीका सोच रहा हूं लेकिन कुछ के बारे में उत्सुक हूं।अपाचे पर PHP के साथ लंबे मतदान

अपाचे कई कनेक्शनों को बहुत अच्छी तरह से खोलने में संभाल नहीं करता है। थ्रेड-प्रति-अनुरोध मॉडल लंबे मतदान के लिए अपाचे को अत्यधिक अक्षम बनाता है। सर्वर का उपयोग जैसे कि nginx और lighttpd लाइब्रेरी में इन धागे को बेहतर तरीके से संभालते हैं, मैं एक फ़ंक्शन कॉल से उपलब्ध विशिष्ट सर्वरों के लिए अनुकूलित विभिन्न कार्यों को लागू करने की योजना बना रहा हूं। अपाचे के मामले में, जो PHP अनुप्रयोगों के लिए एक विशाल बाजार हिस्सेदारी रखने के लिए होता है, मुझे एक बेहतर समाधान की आवश्यकता है।

क्या होल्डिंग/रोक पर आने वाले अनुरोध को रखने का कोई तरीका है और जब तक मैं इसे पुनः सक्रिय करने के लिए तैयार नहीं हूं, तब तक अन्य अनुरोधों को संसाधित करना जारी रखें?

मुझे यकीन नहीं है कि यह समझ में आता है या यदि मैं सही रास्ते पर भी हूं। एक संभावित समाधान क्या है कि एसओपीएपी सर्वर पर PHP में लंबे मतदान के लिए अनुशंसा करता है?

+0

आप सर्वर पर प्रसंस्करण क्यों रोकेंगे? क्या यह आपके उपयोगकर्ता को बहुत इंतजार नहीं करेगा? – Joseph

+0

अपाचे के साथ, यह थ्रेड-प्रति-अनुरोध मॉडल का उपयोग करता है, इसलिए किसी एप्लिकेशन में प्रारंभिक पृष्ठ अनुरोध थ्रेड का उपयोग करता है, और उसके बाद AJAX अनुरोध (जिसे DOM लोड किया जाता है) एक अलग थ्रेड का उपयोग करेगा। समस्या उच्च मात्रा यातायात का प्रयास कर रही है हजारों धागे पैदा करेगा और आखिरकार सर्वर को अक्षम कर देगा। –

+0

AJAX/PHP लंबे मतदान पृष्ठ लोड को यादृच्छिक रूप से शुरू करने के बाद हमें एक ही समस्या थी (सीसीए प्रत्येक 4-5 लोड) बहुत अधिक समय ले रहा है ... अभी के लिए और केवल नोटिस के लिए मैंने इसे नींद नहीं किया() PHP में किसी भी तरह से, और timewait कार्यक्षमता जावास्क्रिप्ट में ले जाया गया, तो अब जावास्क्रिप्ट प्रत्येक PHP नए निष्पादन का अनुरोध कर रहा है उदाहरण के लिए 10s लेकिन पेज लोड अब ठीक लगता है। –

उत्तर

1

यह निरंतरता की तरह लगता है। आप निश्चित रूप से PHP में, किसी भी सुरुचिपूर्ण तरीके से ऐसा नहीं कर सकते हैं। यदि आप ऐसा करना चाहते हैं, तो आपका सबसे अच्छा मौका वर्तमान स्थिति को सहेजना होगा, और कोड को इस तरह से लिखना होगा कि आप राज्य को लोड करते समय छोड़कर कहां से शुरू कर सकते हैं।

+0

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

0

मुझे नहीं लगता कि कोई समाधान है। आप एक सामान्य अनुरोध से मतदान अनुरोध को अलग नहीं कर सकते हैं। केवल अपाचे से बचें जो मदद कर सकता है (उदाहरण के लिए 80 पर nginx चला रहा है, मतदान अनुरोधों को छोड़कर 81 पर अपाचे को सभी अनुरोध अग्रेषित करें)।

मुझे यह भी नहीं लगता कि आपको कोई समस्या है। Nginx या अन्य सर्वर Apache से अधिक कुशल नहीं है। मतदान एक PHP अनुरोध है, mod_php के साथ अपाचे कम या अधिक अच्छी पसंद है। Nginx PHP की सेवा में अपाचे से कम संसाधन का उपयोग नहीं करेगा।

+4

'Nginx PHP की सेवा में अपाचे से कम संसाधन का उपयोग नहीं करेगा। क्या आप इसके बारे में निश्चित हैं? http://serverfault.com/questions/157520/apache-vs-nginx –

+0

निश्चित रूप से। मैं विपरीत यूआरएल में कुछ भी नहीं पढ़ता। "mod_php php-fpm की तुलना में मामूली तेज़ है", "cgi mod_php से बहुत धीमी है" आदि। बेशक, आप इस पर निर्भर करते हैं कि आप सामान्य PHP फ़ाइलों/स्थैतिक फ़ाइलों बनाम लंबे मतदान करते हैं, यदि आपके पास कैशिंग रिवर्स प्रॉक्सी है अपाचे में आप कितने मॉड्यूल का उपयोग कर रहे हैं, इस पर अपाचे को स्थिर फाइलों से परेशान नहीं किया गया है ... – jcisio

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