2013-04-20 28 views
7

कुशल डेटा लोड करने/डेटा को धक्का देने के लिए वेब सर्वर से डेटा को पुनः लोड करने की बात आती है, तो मैं 'जाने का रास्ता' (यानी सबसे कुशल, सबसे अधिक उपयोग किया जाने वाला, सामान्य स्वीकार्य तरीका) ढूंढ रहा हूं। एक फ्रंट एंडसर्वर से क्लाइंट

enter image description here

डेटा धाराओं अंत आवेदन में अलग एक दूसरे से हो जाएगा: अंत आवेदन में, मैं कई उत्पादन क्षेत्रों जहां डाटा इस तरह के लिखे जाने की है, उदाहरण के लिए होगा। लाइनों को सर्वर से ताजा, अद्यतित डेटा के साथ पुनः लोड करना होगा।

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

मैंने नोड.जेएस में देखा है, लेकिन ऐसा लगता है कि मेरे मेजबान के साथ यह संभव नहीं है।

मैंने लोगों को अजाक्स पुश के बारे में बात करने के बारे में सुना है, क्या मुझे इसका उपयोग करना चाहिए? यदि हां, तो क्या आप मुझे बुनियादी उपयोग उदाहरण दे सकते हैं?

यदि नहीं, तो क्या होगा कई डेटा स्ट्रीम होने पर जाने का तरीका हो सकता है जिसे एक सेकंड के भीतर फिर से लोड किया जाना है?

आवश्यकताएं गति और कम डेटा यातायात है। इसलिए, मुझे लगता है कि सर्वर को लगातार मतदान करने का विकल्प नहीं होगा, क्योंकि इससे एक बड़ा ओवरहेड बन जाएगा।

मुझे नहीं लगता कि यह किसी भी महत्व का है, लेकिन मैं पीछे के अंत में PHP5.3 का उपयोग कर रहा हूं और jQuery के साथ jQuery 1.9.1 के साथ जावास्क्रिप्ट का उपयोग कर रहा हूं।

उत्तर

8

यह सवाल कई बार कहा गया है, लेकिन एक से थोड़ा अलग अलग तरीकों से साथ प्रतिक्रिया भेज:
नहीं कोई डेटा का संकेत प्रतिक्रिया भेजें।

सारांश में: यदि आप देख रहे हैं यहाँ कुछ संदर्भ पढ़ने लायक हैं कर रहे हैं यो बिल्डिंग अपाचे पर PHP का उपयोग करके आपका समाधान, फिर खुले लगातार कनेक्शन (HTTP लंबे मतदान या स्ट्रीमिंग) को संसाधनों का उपयोग करने के लिए बहुत तेज़ी से उपयोग करना है (अत्यधिक अक्षम है)। तो, आप hosted solution (* अस्वीकरण - मैं एक होस्टेड समाधान के लिए काम करता हूं) का उपयोग करके बेहतर होगा।

HTTP-लंबे मतदान और HTTP स्ट्रीमिंग समाधान हैं जो सर्वर द्वारा भेजे गए ईवेंट और वेबसाकेट द्वारा अधिलेखित किए गए हैं। तो, जहां संभव हो (जहां वेब क्लाइंट समर्थन प्रदान करता है) आपको HTTP-आधारित समाधान पर वापस आने से पहले इन समाधानों में से एक का उपयोग करना चाहिए। एक अच्छी रीयलटाइम वेब तकनीक स्वचालित रूप से आपके लिए इसे संभालेगी।

चूंकि आपका चित्र दिखाता है कि आप एकाधिक डेटा स्ट्रीम की सदस्यता ले रहे हैं, आपको Publish/Subscribe समाधान पर भी विचार करना चाहिए जो स्वाभाविक रूप से इसके साथ फिट बैठता है। फिर, एक अच्छा रीयलटाइम वेब तकनीक समाधान आपको यह प्रदान करेगा।

realtime web technology guide भी देखें।

+1

+1 इस जानकारी को ट्रैक करने से मुझे हाल ही में एक परियोजना के लिए कुछ समय लगा। मेरे पास शून्य वेब विकास अनुभव था और यह जानकर आश्चर्य हुआ कि वेब सर्वर से ब्राउज़र तक डेटा को धक्का देना असामान्य था। –

2

मुझे लगता है कि आप जो खोज रहे हैं उसे आम तौर पर Comet कहा जाता है। यह तकनीक अक्सर काम करने के लिए बनाई गई है:

  • क्लाइंट (वेब ​​ब्राउज़र) नए डेटा के लिए सर्वर से अनुरोध करता है। यह पृष्ठ को पुनः लोड नहीं कर रहा है, बल्कि जावास्क्रिप्ट
  • में किया जाता है सर्वर अनुरोध के जवाब देता है जब उसके पास क्लाइंट के लिए कुछ डेटा होता है। दोबारा, यह यूआई को प्रभावित नहीं करता है क्योंकि यह पृष्ठ खुद ही नहीं है जो पुनः लोड हो रहा है: जावास्क्रिप्ट कोड में बोलने के लिए डेटा की लेटेडग "पृष्ठभूमि में" की जाती है।
  • सेवा पक्ष पर, अनुरोध नए डेटा की प्रतीक्षा करता है, और उपलब्ध होने पर नया डेटा देता है, या टाइमआउट अंतराल (सर्वर पर परिभाषित) पहुंचने पर कुछ भी नहीं लौटाता है। यह टाइमआउट आमतौर पर ब्राउज़र HTTP टाइमआउट से कम होने के लिए सेट किया जाता है। इसका कारण यह है कि सर्वर यह जान सकता है कि किसी विशेष ग्राहक को डेटा का एक विशेष टुकड़ा मिला है या नहीं। यदि क्लाइंट पक्ष पर अनुरोध करने की अनुमति है, क्लाइंट के समय समाप्त होने के बाद सर्वर द्वारा मूल अनुरोध का जवाब दिया जा सकता है, और ग्राहक को डेटा नहीं मिलेगा, भले ही सर्वर सोचता है कि ऐसा हुआ है।

डेटा वास्तव में आमतौर पर जेएसओएन के रूप में स्थानांतरित किया जाता है, लेकिन आप जो भी एन्कोडिंग चाहते हैं उसे चुन सकते हैं। इसे कैसे करें इसके उदाहरण के लिए here देखें। Goosh इस तकनीक का एक और उदाहरण है, और Interactive Python Shell है। सभी के लिए कोड उपलब्ध है।


PHP पक्ष पर आप एक ऐसा पृष्ठ बनाना चाहते हैं जो इन "पृष्ठभूमि" जावास्क्रिप्ट धूमकेतु अनुरोधों का जवाब देगा। यह वही पृष्ठ हो सकता है जो उपयोगकर्ता लोड करता है, लेकिन मान लें कि स्पष्टीकरण की आसानी के लिए यह अलग है। तो उपयोगकर्ता index.php लोड करता है और जावास्क्रिप्ट धूमकेतु कोड getNewData.php को नया डेटा पुनर्प्राप्त करने के लिए कॉल करता है।

आपके getNewData.php में आप अपने ईवेंट की प्रतीक्षा कर सकते हैं और फिर डेटा वापस कर सकते हैं। आप इसके लिए मतदान का उपयोग नहीं करना चाहते हैं, लेकिन PHP पुस्तकालय हैं जो घटनाओं पर प्रतीक्षा करने के लिए विभिन्न इंटरप्रोसेस संचार रणनीतियों का उपयोग करने की अनुमति देते हैं, this question for instance देखें। अपने getNewData.php के लिए उच्च स्तरीय स्यूडोकोड के रूप में विचार करेंगे इस प्रकार है:

  1. पार्स JSON अनुरोध
  2. (समय समाप्ति के साथ) एक कुशल प्रतीक्षा राज्य दर्ज करें, अपने लिए इंतज़ार कर "नया डेटा उपलब्ध होने" घटना
  3. पिछले किया कदम समय बाहर?
    हाँ: नए डेटा
+0

जबकि यह उत्तर तकनीकी रूप से सही है, यह एक पूर्व-दिनांकित और अक्षम समाधान की सिफारिश कर रहा है, जो हाल ही की तकनीकों द्वारा बेहतर हल किया गया है। अनुरोधित कार्यक्षमता की तरह प्राप्त करने के लिए HTTP हैक्स के लिए धूमकेतु एक छतरी शब्द है। एचटीएमएल 5 ने [सर्वर-प्रेषित घटनाक्रम] (http://en.wikipedia.org/wiki/Server-sent_events) और [वेबसाकेट] (http://en.wikipedia.org/wiki/WebSocket) पेश किया ताकि ये हैक नहीं थे इन प्रकार की समस्या को हल करने के लिए कॉल का पहला बंदरगाह। इसके अतिरिक्त, एक PHP सर्वर पर एक लंबे मतदान मतदान (जैसा कि इस उत्तर में उल्लिखित है), अत्यधिक अक्षम होगा। – leggetter

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