2011-05-29 6 views
14

मैं रीयल-टाइम एप्लिकेशन डेवलपमेंट के लिए नौसिखिया हूं और वहां अपने असंख्य विकल्पों के आस-पास अपने सिर को लपेटने की कोशिश कर रहा हूं। मैंने वहां कई ब्लॉग पोस्ट, नोट्स और निबंध पढ़े हैं कि लोग साझा करने के लिए बहुत दयालु हैं। फिर भी, मेरे छोटे दिमाग में एक साधारण समस्या का अनुत्तरित नहीं लगता है। मैंने सोचा कि कई अन्य लोगों के पास एक ही समस्या हो सकती है, इसलिए मैं भी साइन अप कर सकता हूं और एसओ पर यहां पोस्ट कर सकता हूं। यहां जाता है:रीयल-टाइम एप्लिकेशन नौसिखिया - नोड.जेएस + रेडिस या रैबिटएमक्यू -> क्लाइंट/सर्वर कैसे?

मैं एक छोटा सा वास्तविक समय ऐप बना रहा हूं जो असीमित चैट + एक और मजेदार फीचर है।

  1. दीप + RabbitMQ
  2. Node.js + Redis + पब-उप

मुझे विश्वास है कि मैं मूल बातें सीखने शुरू करने के लिए मिलता है और निर्माण: मैं निम्नलिखित दो विकल्पों के लिए नीचे मेरी पसंद उबला हुआ यह बाहर है। हालांकि, मेरे (गंभीरता से n00b) प्रश्न हैं:

  • मैं एंड-यूजर - क्लाइंट से/दोनों में सर्वर से कैसे संवाद करूं? क्या यह सरल जावास्क्रिप्ट लंबा/अनंत मतदान होगा?
  • दो में से, जो एकल स्लाइस (100 - 1,000 उपयोगकर्ताओं को मानते हुए) से निर्माण और प्रबंधन करने के लिए अधिक कुशल हो सकता है?
  • क्या मुझे बस 'पुराने स्कूल' प्रतिमान में jQuery के साथ सब कुछ बनाना चाहिए और फिर पहचानें कि कौन सा ढेर अधिक समझ सकता है? बस इतना है कि मैं एक प्रोटोटाइप के रूप में उत्पाद fleshed प्राप्त कर सकते हैं और फिर इसे 'अनुकूलित'। या सिर्फ अनुकूलन से दूसरे में एक में लिख रहा है? (मुझे ऐसा लगता है, लेकिन मैं इस पर व्यक्तिगत रूप से 100% नहीं हूं)

मुझे आशा है कि यह एक पागल सवाल नहीं है और तुरंत फ्लेम नहीं होगा। कुछ रचनात्मक प्रतिक्रिया पसंद करेंगे, इस समुदाय से प्यार है!

धन्यवाद।

उत्तर

21

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

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

मैं खरगोश एमक्यू का उपयोग करने का सुझाव दूंगा और जो भी प्रोग्रामिंग भाषाएं आप पहले ही परिचित हैं। चूंकि एलएएमपी में एम को आमतौर पर माईएसक्यूएल के रूप में व्याख्या किया जाता है, इसका मतलब है कि आप या तो MySQL का उपयोग नहीं करेंगे, या केवल डेटा के दीर्घकालिक भंडारण के लिए इसका उपयोग करेंगे, न कि रीयलटाइम संचार के लिए।

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

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

+0

यह बहुत उपयोगी था! धन्यवाद! क्षमा करें अभी तक इसे वोट नहीं दे सकता :) – iUsable

+0

यही वह है जो मैं सोच रहा हूं - 1।पूरी चीज को प्रोटोटाइप करने के लिए, मेरे लिए LAMP और jQuery पर बनाएं। 2. रीयल-टाइम डेटा को मेमोरी या वर्चुअलाइज्ड करने के लिए मोंगो या रेडिस सेट अप करें, परीक्षण सबकुछ अभी भी काम करता है। 3. परिवहन परत, परीक्षण अनुकूलित करने के लिए पब/उप या RabbitMQ का प्रयोग करें। 4. क्या मुझे क्लाइंट-सर्वर पक्ष के लिए कुछ भी चाहिए, जैसे धूमकेतु या क्या मैं लंबे समय तक मतदान का उपयोग करता हूं? मैं वर्तमान में सीमित सीमित गोद लेने के साथ websockets का उपयोग नहीं करना चाहता। धन्यवाद। – iUsable

+1

वेबसाइकिलों के धीमे गोद लेने से बचने के लिए सॉकेट.io जैसे क्लाइंट लाइब्रेरी का उपयोग करें - यह लंबे मतदान/फ़्लैश सॉकेट इत्यादि पर वापस आ जाता है। मॉड्यूल क्लाइंट और सर्वर दोनों के लिए मौजूद है। – Josh

2

क्या मुझे बस 'पुराने स्कूल' प्रतिमान में jQuery के साथ सब कुछ बनाना चाहिए और फिर पहचानें कि कौन सा ढेर अधिक समझ सकता है? बस इतना है कि मैं एक प्रोटोटाइप के रूप में उत्पाद fleshed प्राप्त कर सकते हैं और फिर इसे 'अनुकूलित'। या सिर्फ अनुकूलन से दूसरे में एक में लिख रहा है? (मुझे ऐसा लगता है, लेकिन मैं इस पर व्यक्तिगत रूप से 100% नहीं हूं)

इसे आमतौर पर आरएडी (तेज़ एप्लिकेशन डिज़ाइन/विकास) कहा जाता है और यही वह है जो मैं अभी अनुशंसा करता हूं। यह आपको अवधारणा का प्रमाण बनाने देता है जिसे आप बाद में काम करने के लिए उपयोग कर सकते हैं ताकि आप जो भी करना चाहते हैं उसे प्राप्त कर सकें।

सर्वर से ग्राहकों से बात करने के तरीके के रूप में, और इसके विपरीत, क्या आपने वेबसाइकिलों पर बिल्कुल पढ़ा है?

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

+0

धन्यवाद jcolebrand। मैं WebSockets (और socket.io और pusherapp.com) पर बहुत कुछ पढ़ रहा हूं लेकिन समस्या यह है कि इसमें अभी तक सर्वव्यापी या सर्वव्यापी स्वीकृति नहीं है। विशेष रूप से मोबाइल ब्राउज़र पर (यहां तक ​​कि जिंजरब्रेड afaik तक)। – iUsable

+0

मेरी दूसरी चिंता यह है कि क्या मैं क्लासिक एसक्यूएल तरीके का निर्माण कर रहा हूं और बाद में सभी डीबी सामान को रेडिस के के-वी मॉडल में फिर से कर सकता हूं या बस अभी सब कुछ कर सकता हूं? – iUsable

+0

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

0

खैर,

दीप - अपाचे हर अनुरोध के लिए नई प्रक्रिया पैदा करते हैं। RabbitMQ कई सुविधाओं के साथ उपयोगी हो सकता है। Node.js - ईवेंट लूपिंग की सहायता से असीमित रूप से सभी अनुरोधों को संभालने के लिए एकल प्रक्रिया का उपयोग करता है। तो, अपाचे की तरह कोई अतिरिक्त ओवरहेड प्रक्रिया निर्माण नहीं। असीमित चैट एप्लिकेशन के लिए, socket.io + Node.js + redis pub-sup सबसे अच्छा ढेर है। मैंने उपर्युक्त स्टैक का उपयोग कर वास्तविक समय अधिसूचना लागू कर दी है।

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