2011-11-11 8 views
5

मैं ऐसी वेबसाइट पर काम कर रहा हूं जो डीबी से कुछ डेटा प्रदर्शित करता है जो अक्सर बदलता है (कतार की स्थिति और चैट वार्तालाप)। मेरा वर्तमान सेटअप अपाचे/PHP/MySQL है। स्वाभाविक रूप से मैं हर एक्स सेकंड में सर्वर को मतदान से बचाना चाहता हूं क्योंकि यह अच्छी तरह से स्केल नहीं करता है। मैं लंबे समय तक अजाक्स लंबे मतदान करना चाहता हूं, हालांकि, मैंने पढ़ा है कि अपाचे इस के साथ अच्छी तरह से काम नहीं करता है क्योंकि यह जल्दी से कार्यकर्ता धागे से बाहर चला जाता है। वहां कई अन्य वेब सर्वर हैं जो इस समस्या को हल करते हैं: nginx, tornado, आदि। हालांकि, मेरी समस्या यह है कि, PHP केवल सर्वर-साइड स्क्रिप्टिंग भाषा है जो मुझे पता है। इसके अलावा मैंने कुछ PHP स्क्रिप्ट लिखी हैं इसलिए मैं उन्हें रखना चाहूंगा यदि मैं कर सकता हूं। मैं सर्वर स्विचिंग के साथ ठीक हूं जब तक कि मैं अभी भी PHP का उपयोग कर सकता हूं।क्या रिवर्स AJAX लंबे मतदान के साथ php स्केलेबल है?

लेकिन कुछ और शोध करने के बाद, मैंने पढ़ा है कि लोग कहते हैं कि PHP (PHP-FPM?) भी हर अनुरोध के लिए एक प्रक्रिया बनाता है, जिसका अर्थ है कि मेरे पास सैकड़ों/हजार खुले कनेक्शन हैं, वहां सैकड़ों होंगे/हजारों प्रक्रियाओं, जो भी समस्या होगी।

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

+1

का उपयोग करना चाहिए, यह स्वयं नहीं किया लेकिन जेएस सॉकेट का उपयोग करने का विकल्प होगा? शायद node.js का उपयोग कर भी। ब्राउज़र में websockets के लिए मूल समर्थन iproving है, लेकिन मुझे लगता है कि jquery प्लगइन उस संभालती है? –

+0

मैं वास्तव में वेबसाइकिल पर विचार नहीं कर रहा हूं क्योंकि यह सभी प्रमुख ब्राउज़रों पर समर्थित नहीं है। मैंने वास्तव में node.js में देखा है, लेकिन जो मैंने सुना है उससे अभी भी अपेक्षाकृत नया है इसलिए ढांचा समर्थन अधिक सीमित है। मैं वर्तमान में Django पर विचार कर रहा हूं, जिसका मतलब है कि मुझे अजगर पर जाना है। मैंने ढांचे के बारे में अच्छी बातें सुनीं, लेकिन अगर प्रदर्शन प्रदर्शन के आसपास पहुंचने का कोई तरीका है, तो भी मैं PHP के साथ रहना पसंद करूंगा। – pinghsien422

+0

मैं निश्चित रूप से node.js पर पुनर्विचार करना चाहता हूं - सर्वर पोर्ट node.js के लिए एक साधारण AJAX अनुरोध शायद चाल चल रहा है। –

उत्तर

7

PHP php-fpm मोड में चलाए गए PHP में अभी भी सीमाएं होंगी, खासकर यदि आपका कोड बहुत मेमोरी खा रहा है। आप कुछ उपलब्ध स्मृति के बिना हजारों समांतर प्रक्रियाओं को चलाने में सक्षम नहीं होंगे। लेकिन यह आमतौर पर mod_php से तेज़ प्रदर्शन करता है, और कम से कम HTTP अनुरोध जिसे PHP की आवश्यकता नहीं होती है उसे वेबसर्वर द्वारा नियंत्रित किया जाता है, और यदि वह वेबसर्वर nginx है तो आपको समानांतर में बहुत अधिक HTTP अनुरोध उपलब्ध होंगे।

php-fpm के साथ आपके पास प्रतीक्षा अनुरोधों की कतार भी होगी, जो अस्थायी बड़े ट्रैफ़िक के मामले में उपयोगी हो सकती है, क्योंकि कम से कम अनुरोध कतारबद्ध नहीं हैं, अस्वीकार नहीं किए जाते हैं।

अब लंबे मतदान परिचालन nginx (या अन्य, यह एक उदाहरण है) के साथ ठीक है, लेकिन PHP के साथ नहीं। PHP लंबे समय से चलने वाले सर्वर होने के लिए नहीं बनाया गया है, प्रत्येक अनुरोध एक नई प्रक्रिया है, यह वास्तव में KeepAlive चीज़ के लिए सही विकल्प नहीं है। लेकिन "विभाजित करें" (विभाजन और नियम)। आपके लंबे मतदान कार्य आपके PHP एप्लिकेशन के पास चल सकते हैं, लेकिन आपके PHP एप्लिकेशन के बिना।

उदाहरण के रूप में jappix project पर देखें, यह एक PHP प्रोजेक्ट है। लेकिन आपको कहीं भी एक एक्सएमपीपी सर्वर (जैसे ejabberd) और बीओएसएच सर्वर को पोर्ट 80 पर प्रॉक्सी के रूप में उस बोश सर्वर पर प्रॉक्सी के रूप में रखना होगा (इसलिए आपके पास पोर्ट 80 पर xmpp चैट प्रोटोकॉल है, nginx और ejabberd के माध्यम से, और कुछ भी नहीं उस के लिए PHP पक्ष)। समस्या तब आपके अनुप्रयोग प्रमाणीकरण, पहचान, और इस तरह से कनेक्ट करने के लिए है, और यह XMPP सर्वर कॉन्फ़िगरेशन को विस्तारित करके किया जाना चाहिए (ताकि यह आपके एलपीएपी सर्वर को उदाहरण के लिए आपके PHP एप के रूप में उपयोग करे)।

आपकी दूसरी लंबी मतदान समस्या कतार की स्थिति है। आप इसके लिए कुछ एक्सएमपीपी एक्सटेंशन पा सकते हैं, शायद। या आप कतार पर नियमित AJAX प्रश्नों को कर सकते हैं। आपके PHP अनुप्रयोग पर बड़ी संख्या में AJAX अनुरोधों से बचने के लिए उपयोगी तकनीक में से एक है फिबोनैकी संख्याओं (यह एक उदाहरण है) के आधार पर चेक के AJAX कॉलबैक पर अगली AJAX जांच को फिर से निर्धारित करना है। तो पहली बार अगली अजाक्स कॉल 1 मिनट बाद, अगले बार 2 मिनट, फिर 3 एम, 5 मीटर, 8 मीटर, 13 मीटर, 21 मीटर, 34 मीटर, 55 मीटर, 89 मीटर, 144 मीटर, आदि निर्धारित किया जाएगा। विचार यह है कि जांचना शायद महत्वपूर्ण है पृष्ठ लोड के 1 मिनट बाद नए संदेश आने वाले। चूंकि उपयोगकर्ता अभी भी एक ही पृष्ठ पढ़ रहा है (या कॉफी पी रहा है, किसी मित्र से बात कर रहा है, अपने कंप्यूटर को बंद किए बिना छुट्टियों पर जा रहा है), हम अगले चेक में अधिक से अधिक देरी कर सकते हैं।उपयोगकर्ता को मानने का एक तरीका वास्तव में सक्रिय नहीं है। ध्यान दें कि आप अन्य तरीकों से उपयोगकर्ता गतिविधि का पता लगा सकते हैं और रीशेड्यूलिंग को बदल सकते हैं।

-1

PHP लंबे समय तक मतदान, धूमकेतु और रिवर्स AJAX प्रौद्योगिकियों के लिए सही है। आपको Node.js

+1

कृपया एक पंक्ति में जवाब देने के बजाय कुछ कारण दें। – pascalhein

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