2011-08-16 7 views
5

ब्राउज़र द्वारा अपाचे सर्वर से एक PHP वेब पेज लोड होने के बाद, क्लाइंट साइड जावास्क्रिप्ट PHP अद्यतन स्क्रिप्ट में हर 5 सेकंड में AJAX अनुरोध भेज रहा है। जेएसओएन में एन्कोडेड AJAX प्रतिक्रिया काफी बड़ी हो सकती है, इसलिए यदि मैं पिछले AJAX अनुरोध के बाद कोई बदलाव नहीं करता हूं, तो पूरे सरणी '[]' को भेजना चाहता हूं, या अगर पूरे एएसएक्स ऑब्जेक्ट्स वाली पूरी सरणी है तो अंतिम AJAX अनुरोधों के बाद से बदलें।सैकड़ों अपाचे प्रक्रियाएं अजाक्स अनुरोधों के बाद चारों ओर लटकती हैं जब सत्र परिवर्तनीय का उपयोग किया जाता है

'[]' या पूर्ण सरणी भेजने को लागू करने के लिए मैं एक सत्र चर का उपयोग कर रहा हूं।

<?php 
session_start(); 
$output = '[]'; // server is running PHP 5.1 so can't use built in JSON encode 
// code here queries a database and updates $output based on the query result 
if (isset($_SESSION['previous_output'])) { 
    if ($_SESSION['previous_output'] == $output) { 
     echo '[]'; 
    } else { 
     $_SESSION['previous_output'] = $output; 
     echo $output; 
    } 
} 
?> 

ऊपर स्क्रिप्ट को लागू करने के बाद, वेब सर्वर व्यवस्थापक देखा "बहुत सारे" httpd प्रक्रियाओं बनाया है और चारों ओर फांसी, अंततः एक पीस को रोकने के लिए सर्वर लाने जा रहा है: मेरे अद्यतन स्क्रिप्ट तरह दिखता है।

जब मैं सत्र चर शामिल कोड को हटा देता हूं, तो कुछ httpd प्रक्रियाएं अभी भी लटकती हैं, लेकिन "बैकलॉग" उतना बुरा नहीं है, और आखिरकार सर्वर पर ध्यान देने योग्य प्रभाव होने से पहले प्रक्रियाएं दूर हो जाती हैं।

किसी भी समय आधे दर्जन "आगंतुकों" की सेवा करने वाले वेब सर्वर का भारी उपयोग नहीं किया जाता है। वेब पेज 5 सेकंड AJAX अनुरोध कर रहा है "संरक्षित" है, जिसका अर्थ है कि केवल एक ही व्यवस्थापक उपयोगकर्ता इसे एक समय में एक्सेस कर सकता है

मुझे PHP MySQLi Singleton for Ajax-Requests end in to many processes पर एक और पोस्टिंग मिली जो समान लगता है, और यह AJAX पुश इंजन (एपीई) प्रोजेक्ट को संदर्भित करता है, जिसे मैं अंततः जांचना चाहता हूं। हालांकि, मैं वर्तमान में समय और संसाधनों के लिए दबाया गया हूं (उदाहरण के लिए, एक एपीई सर्वर स्थापित करें ...), इसलिए मैं खो गया हूं कि क्या किया जा सकता है।

सर्वर प्रदर्शन पर प्रतिकूल प्रभाव डाले बिना 5 सेकंड AJAX अनुरोधों को कैसे करें? सत्र चर का उपयोग इस तरह के एक उल्लेखनीय अंतर बनाते हैं?

उत्तर

2

अपाचे आने वाले अनुरोधों को संसाधित करने के लिए निष्क्रिय श्रमिकों के एक समूह को बनाए रखने की कोशिश करता है। इन सेटिंग्स को tweaked किया जा सकता है (निष्क्रिय श्रमिकों की न्यूनतम संख्या, श्रमिकों की अधिकतम संख्या - विशेष रुचि के MaxRequestsPerChild, इस मान को कम करने का प्रयास करें)। इससे कोई समस्या नहीं होनी चाहिए - मान लीजिए कि आपकी स्क्रिप्ट सही तरीके से समाप्त हो रही है (यह सामान्य वेब ऐप के लिए कोई समस्या नहीं होनी चाहिए)। आपको serverfault community से पूरी तरह से जवाब मिल सकता है।

इसके अलावा, सर्वर लोड (सक्रिय उपयोगकर्ताओं के #, संसाधनों का उपयोग एपीआई आदि) के आधार पर, आपको अपने ऐप को स्केल करने की आवश्यकता हो सकती है (अमेज़ॅन की ec2 सेवा के साथ शोध ऑटोस्कलिंग)।

http://httpd.apache.org/docs/2.0/mod/worker.html

+1

इस के अलावा, अपाचे KeepAliveTimeout निर्देशक http://httpd.apache.org/docs/2.0/mod/core.html#keepalivetimeout पर गौर – Mike

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