2010-06-07 4 views
11

में "कनेक्शन: Keep-Alive" मैं एक सिल्वरलाइट एप्लिकेशन से एक HTTP पृष्ठ (यानी प्रत्येक HTTP अनुरोध के लिए एक नया टीसीपी कनेक्शन बनाये बिना) एक HTTP सर्वर से एक HTTP सतत कनेक्शन स्थापित करने का प्रयास कर रहा हूं।सर्वर प्रतिक्रिया

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

मैंने इस समस्या के आसपास काम करने के लिए कुछ चीजों की कोशिश की है: अलग-अलग तरीके (जीईटी और पोस्ट), स्पष्ट रूप से मेरी स्क्रिप्ट की शुरुआत में निम्न PHP कोड के साथ प्रतिक्रिया के लिए "कनेक्शन: रखें-जिंदा" देना:

header("Connection: Keep-alive"); 

उत्तरार्द्ध प्रतिक्रिया के लिए अपेक्षित शीर्षलेख जोड़ता है, जो अच्छा है, लेकिन एक अतिरिक्त "कनेक्शन: क्लोज़" अभी भी प्रतिक्रिया शीर्षकों में जोड़ा गया है।

क्या यह PHP या अपाचे की एक विशेषता है जो "बंद" (कुछ सुरक्षा या प्रदर्शन उद्देश्य के लिए, मैं अनुमान लगा रहा हूं) लागू करता हूं या क्या मुझे बस कुछ याद आ रही है?

अग्रिम धन्यवाद।

पीएस : पैकेट को सूँघकर, मैंने देखा है कि कई वेबसाइटें "Keep-live" का उपयोग नहीं करती हैं और टीसीपी कनेक्शन पुनः स्थापित किया जाता है। HTTP 1.1 के तहत डिफ़ॉल्ट और पसंदीदा व्यवहार को Keepalive नहीं है?

+0

कि शायद अपाचे, पीएचपी नहीं है - मेरी जानकारी के अनुसार, पीएचपी कि पर कोई नियंत्रण नहीं है। आप एक ही कनेक्शन के माध्यम से स्थिर फ़ाइल का अनुरोध करने का प्रयास करके सत्यापित कर सकते हैं। अपाचे निर्देश: http://httpd.apache.org/docs/2.2/mod/core.html#keepalive –

उत्तर

24

Keep-Alive कार्यक्षमता लगातार कनेक्शन के लिए नहीं है।

Keep-Alive वेबसाइट के लिए कनेक्शन की संख्या को कम करने के लिए है। किसी वेबपृष्ठ में प्रत्येक छवि/सीएसएस/जावास्क्रिप्ट के लिए नया कनेक्शन बनाने के बजाय कई अनुरोध उसी कनेक्शन का पुनः उपयोग कर बनाए जाएंगे।

कुछ सेटिंग्स हैं जो अपाचे में भी इसे रोकती हैं, जैसे अनुरोधों के बीच कनेक्शन या टाइमआउट पर अधिकतम संख्या में अनुरोध। यह आपके संसाधनों को भी तेज़ी से खाएगा क्योंकि प्रत्येक कनेक्शन को अपने धागे की आवश्यकता होती है।

आपको उस तरह के काम के लिए बनाया गया एक और समाधान पर स्विच करना चाहिए।

सेवाओं है कि अपने कनेक्शन खोलने आप http://orbited.org और http://twistedmatrix.com/trac/

+1

+1 लगातार कनेक्शन के लिए HTTP का दुरुपयोग नहीं करने के लिए। यदि आवश्यक हो तो PHP डिमन एक बंदरगाह/सॉकेट को सुनना पर्याप्त है। – Wrikken

+0

हां, यह भी एक संभावना है।मेरे opionion कक्षा में इतना आसान कर सकते हैं और अभी भी एक स्थिर http सर्वर प्रदान करते हुए अधिक स्थिर है :) – favo

+0

मैं एक प्रतिबंधित संदर्भ में एक वास्तविक समय त्वरित संदेश एप्लिकेशन (वास्तविक समय पहलू के लिए Google वेव की तरह) प्रोग्रामिंग कर रहा हूँ (PHP केवल और न्यूनतम वेबसर्वर विशेषताएं)। मुझे डेटबेस का उपयोग करने की भी अनुमति नहीं है। इस तरह के दबाव अनुरोध (प्रत्येक कीस्ट्रोक मूल रूप से एक अनुरोध उपज) में, सर्वर के साथ कनेक्शन को जीवित रखने के लिए उपयोगी होगा। आपके सुझाव के लिए धन्यवाद। ZZ कोडर की तुलना में एक बेहतर उत्तर के लिए – ZenithM

5

पर एक नज़र के बाद से पीएचपी HTTP कनेक्शन प्रबंधित नहीं करता है सकते हैं रखने के लिए, यह कोई रास्ता नहीं इस सेटिंग को परिवर्तित करने के लिए है। आपको इसे सर्वर में सेट करने की आवश्यकता है। उदाहरण के लिए, आप रखें जिंदा अपाचे में इस तरह यदि आप mod_php उपयोग कर रहे हैं सक्षम कर सकते हैं,

KeepAlive On 
+0

धन्यवाद, यह पैरामीटर वास्तव में मेरे सर्वर पर बंद होने लगते हैं। – ZenithM