2009-01-14 14 views
7

के साथ http अनुरोध/प्रतिक्रिया मॉडल को कनेक्ट करना सिंक्रोनस क्यूई आधारित मॉडल के साथ सिंक्रोनस http अनुरोध/प्रतिक्रिया मॉडल को जोड़ने का एक अच्छा तरीका क्या है?एसिंक्रोनस कतार

जब उपयोगकर्ता का HTTP अनुरोध आता है तो यह एक कार्य अनुरोध उत्पन्न करता है जो एक कतार (beanstalkd इस मामले में) पर जाता है। श्रमिकों में से एक अनुरोध को उठाता है, काम करता है, और एक प्रतिक्रिया तैयार करता है।

कतार मॉडल अनुरोध/प्रतिक्रिया नहीं है - केवल अनुरोध हैं, जवाब नहीं। तो सवाल यह है कि, हम HTTP की दुनिया में वापस प्रतिक्रिया कैसे प्राप्त करते हैं और उपयोगकर्ता को वापस कैसे प्राप्त करते हैं?

विचार:

  1. Beanstalkd हल्के वजन विषयों या कतारों का समर्थन करता है (वे उन्हें ट्यूबों कहते हैं)। हम प्रत्येक अनुरोध के लिए एक ट्यूब बना सकते हैं, क्या कर्मचारी उस ट्यूब पर एक संदेश बना सकता है, और http प्रक्रिया बैठकर प्रतिक्रिया के लिए ट्यूब पर प्रतीक्षा करें। विशेष रूप से इस तरह से पसंद न करें क्योंकि इसमें स्मृति लेने के आसपास बैठे अपाचे प्रक्रियाएं हैं।

  2. प्रतिक्रिया के लिए http क्लाइंट पोल है। उपयोगकर्ता का प्रारंभिक HTTP अनुरोध कतार पर नौकरी को बंद कर देता है और तुरंत लौटता है। प्रतिक्रिया के लिए समय-समय पर ग्राहक (उपयोगकर्ता का ब्राउज़र) चुनाव। बैकएंड पर कार्यकर्ता अपनी प्रतिक्रिया को memcached में डालता है, और हम nginx को memcached से कनेक्ट करते हैं ताकि मतदान हल्का वजन हो।

  3. Comet का उपयोग करें। दूसरे विकल्प के समान, लेकिन मतदान से बचने के लिए fancier http संचार के साथ।

मैं 2 की तरफ झुक रहा हूं क्योंकि यह आसान और अच्छी तरह से पता है (मैंने अभी तक धूमकेतु का उपयोग नहीं किया है)। मुझे लगता है कि शायद यह एक बेहतर बेहतर मॉडल है जिसे मैंने नहीं सोचा है। तुम क्या सोचते हो?

+0

मुझे एक ही समस्या है और एक ही विकल्प का मूल्यांकन करने की प्रक्रिया में है। क्या आप जो साझा करते हैं, वह कैसे किया जाता है और आपके कार्यान्वित समाधान के पेशेवर और विपक्ष क्या हैं? धन्यवाद – tropikalista

उत्तर

1

यहां how to implement request-response efficiently on JMS है जो उपयोगी हो सकता है (हालांकि जावा/जेएमएस केंद्रित)। सामान्य विचार प्रति क्लाइंट/थ्रेड के लिए अस्थायी कतार बनाना है, फिर जवाबों के अनुरोधों को सहसंबंधित करने के लिए सहसंबंधिता का उपयोग करें।

0

मैं अनुरोध के बाद कई प्रक्रियाओं को चलाने के लिए एक बीनस्टॉक और मेमकैच सिस्टम को कार्यान्वित करना चाहता हूं - इसमें मामला, जब कोई उपयोगकर्ता लॉग इन करता है तो जानकारी देख रहा है (उदाहरण के लिए उपयोगकर्ता की प्रतीक्षा करने वाले संदेशों की संख्या)। जानकारी Memcached में संग्रहीत है और फिर अगले पृष्ठ लोड पर वापस पढ़ें।

हालांकि आप क्या कर रहे हैं इसके बारे में कुछ और जानने के बिना, यह कहना इतना आसान नहीं है कि क्या करने की आवश्यकता है, या कैसे। विकल्प # 2 हालांकि सबसे सरल है, और यह सब कुछ आपको चाहिए - जो आप मजदूरों में वापस आ रहे हैं उसके आधार पर।

+0

कार्य भिन्न और जटिल हैं - आने वाले डेटा का विश्लेषण, डेटा के आधार पर एक फीचर वेक्टर बनाने, एल्गोरिदमिक मिलान करने और अंततः वर्गीकरण से विभिन्न मैचों को थूकना। – Parand

1

मतदान सरल समाधान है; धूमकेतु अधिक कुशल समाधान है। आप मिल गया है इसे किसी न किसी :)

मैं व्यक्तिगत रूप से धूमकेतु प्यार (हालांकि मैं पक्षपाती हूँ, के बाद से मैं WebSync लिखने में मदद की), यह अच्छी तरह से अपने ग्राहकों को किसी चैनल की सदस्यता और जब आपके सर्वर प्रक्रिया के लिए तैयार है संदेश मिलता है। एक चैंप की तरह काम करता है।

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