2010-09-01 12 views
5

मैं रेल ईकॉमर्स एप्लिकेशन पर रूबी बनाने की कोशिश कर रहा हूं, जहां संभावित ग्राहक ऑर्डर देने में सक्षम होंगे और स्टोर के मालिक रीयल-टाइम में ऑर्डर प्राप्त करने में सक्षम होंगे। अंतिम आदेश डेटाबेस (इस समय SQLite) में दर्ज किया जाएगा, और स्टोरधारक के पास एक ब्राउज़र विंडो खुल जाएगी, जहां ऑर्डर को अंतिम रूप देने के बाद नए ऑर्डर दिखाई देंगे। (अनुप्रयोग की जानकारी: मैं आवारा रेल ढांचे का उपयोग कर रहा है, और नियोजन Heroku में एप्लिकेशन की मेजबानी के लिए),मैं रीयल-टाइम में अपडेट किए गए रिकॉर्ड कैसे पुनर्प्राप्त कर सकता हूं? (पुश नोटिफिकेशन?)

मैं अब इस लागू करने के लिए सबसे अच्छा प्रौद्योगिकी पर विचार कर रहा हूँ के रूप में आवेदन उपयोगकर्ताओं का एक बहुत कुछ है करने की उम्मीद है बहुत सारे ऑर्डर भेजना:

1) प्रत्येक ब्राउज़र विंडो प्रत्येक एक्स मिनट में पृष्ठ को रीफ्रेश करती है, सर्वर को लगातार नए रिकॉर्ड (नए ऑर्डर) के लिए मतदान करती है। बेशक, यह सर्वर पर भारी भार डालता है।

2) उपर्युक्त के रूप में, लेकिन कुछ प्रकार के AJAX ढांचे के साथ सर्वर को मतदान करें।

3) कुछ प्रकार की सर्वर पुश तकनीक का उपयोग करें, जैसे 'धूमकेतु' एसिंक्रोनस मैसेजिंग। जुगरनॉट मिला, केवल समस्या यह है कि यह फ्लैश और कस्टम बंदरगाहों का उपयोग कर रहा है, और यह एक समस्या हो सकती है क्योंकि मेरा ऐप कॉर्पोरेट फ़ायरवॉल और एनएटी के पीछे पहुंच योग्य होना चाहिए।

4) मैं भी node.js ढांचे की जांच कर रहा हूं, इस तरह के एसिंक्रोनस मैसेजिंग के लिए कुशल प्रतीत होता है, हालांकि यह हेरोकू में समर्थित नहीं है।

इस तरह की कार्यक्षमता को लागू करने का सबसे प्रभावी तरीका कौन सा है? क्या शायद कोई और तरीका है जिसके बारे में मैंने सोचा नहीं है?

आपके समय और सहायता के लिए धन्यवाद!

+1

आप इसके साथ कैसे गए? :) – bxjx

उत्तर

3

नोड.जेएस शायद एक अच्छा फिट होगा - यह तेज़ है, रीयलटाइम से प्यार करता है और इसमें धूमकेतु का समर्थन है। केवल नकारात्मक बात यह है कि आप अपने समाधान में एक और तकनीक पेश कर रहे हैं। कार्यक्रम में यह बहुत मजेदार है और कई पुस्तकालय रेल और सिनात्रा से प्रेरित हुए हैं।

मुझे पता है कि उसकाोकू एक नोड चला रहा है।जेएस बीटा थोड़ी देर के लिए और लोग हाल ही में nodeknockout प्रतियोगिता के हिस्से के रूप में इसका इस्तेमाल कर रहे थे। See this blog post। यदि यह कोई विकल्प नहीं है, तो आप निश्चित रूप से इसे कहीं और होस्ट कर सकते हैं। यदि आप इसे Heroku में होस्ट करते हैं, तो आप प्रॉक्सी अनुरोधों में सक्षम हो सकते हैं। अन्यथा, आप इसे एक उप डोमेन से खुशी से चला सकते हैं ताकि आप कुकीज़ साझा कर सकें।

चेकआउट socket.io। यह ब्राउज़र की क्षमताओं के आधार पर धूमकेतु करने का सबसे अच्छा तरीका चुनने का एक अच्छा काम करता है।

नोड और रेल के बीच डेटा साझा करने के लिए, आप कुकीज़ साझा कर सकते हैं और फिर सत्र डेटाबेस को अपने डेटाबेस में संग्रहीत कर सकते हैं जहां दोनों एप्लिकेशन इसे प्राप्त कर सकते हैं। एक और अधिक शामिल आर्किटेक्चर में उनके बीच संदेश प्रकाशित करने के लिए रेडिस का उपयोग करना शामिल हो सकता है। या आप http अनुरोधों में जो कुछ भी चाहते हैं उसे पारित करने में सक्षम हो सकते हैं।

1

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

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

आपका अन्य विकल्प HTTP स्ट्रीमिंग (धूमकेतु) है; इसे सेट अप पर अधिक काम की आवश्यकता होगी, लेकिन आपको इसे प्रयास के लायक लग सकता है। आप Realtime on Rails एक शॉट दे सकते हैं। अधिक जानकारी और कैसे बैंडविड्थ उपयोग कम करने के लिए पर सुझाव के लिए देखें:

http://ajaxpatterns.org/Periodic_Refresh
http://ajaxpatterns.org/HTTP_Streaming

+0

हैलो और आपके उत्तर के लिए धन्यवाद। मुझे लगता है कि http स्ट्रीमिंग (धूमकेतु) मेरे आवेदन के लिए अधिक उपयुक्त है, क्योंकि मुझे लगता है कि पूरे दिन स्टोरधारकों को अपने ब्राउज़र के सामने आने की उम्मीद है, ऑर्डर की प्रतीक्षा है। यदि मैं मतदान का उपयोग करता हूं तो यह सर्वर पर एक महत्वपूर्ण बोझ पैदा कर सकता है। तो मैं अपने मौजूदा रूबी रेल ऐप पर धूमकेतु सर्वर (जैसे node.js और अजाक्स पुश इंजन) को एकीकृत कैसे करूं? क्या इसका मतलब है कि मुझे एक और लिनक्स होस्ट सेवा (उसकेोकू के अलावा) के लिए भुगतान करना चाहिए, जहां धूमकेतु सर्वर स्थापित किए जाएंगे? आपको क्या लगता है? धन्यवाद! – Alex

0

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

node.js के लिए कुछ वेबस्केट पुस्तकालय हैं, लेकिन मेरा मानना ​​है कि आप इसे केवल नियमित टीसीपी कनेक्शन का उपयोग करके आसानी से कर सकते हैं।

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