2009-01-02 10 views
35

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

ऐसा करने के लिए मुझे एक ऐसा विचार है जो विशिष्ट संसाधन प्रदान कर रहा है जो संसाधन को तब तक वापस नहीं रखेगा जब संसाधन (अभी तक) मौजूद नहीं है। उदाहरण के लिए, संसाधन दिए गए:

/game/17/playerToMove 

एक इस संसाधन मुझे बता सकता है कि यह मेरे प्रतिद्वंद्वी के स्थानांतरित करने के लिए बारी है पर "GET"। बल्कि लगातार मतदान से पता लगाने के लिए इस संसाधन जब यह मेरे स्थानांतरित करने के लिए बारी है, मैं इस कदम संख्या नोट कर सकते हैं (जैसे कि 5) और अगली चाल प्राप्त करने का प्रयास:

/game/17/move/5 

एक "सामान्य" बाकी मॉडल में यह, ऐसा लगता है कि इस यूआरएल के लिए एक जीईटी अनुरोध 404 (नहीं मिला) त्रुटि लौटाएगा। हालांकि, अगर बजाय, सर्वर कनेक्शन खुला रखा जब तक मेरे प्रतिद्वंद्वी उसकी चाल, यानी .:

PUT /game/17/move/5 

तो सर्वर सामग्री है कि मेरे प्रतिद्वंद्वी कि संसाधन में डाल दिया लौट सकते हैं निभाई। यह दोनों मुझे आवश्यक डेटा प्रदान करेगा, साथ ही साथ एक अधिसूचना भी प्रदान करेगा जब मेरे प्रतिद्वंद्वी मतदान के बिना चले गए हों।

क्या इस तरह की योजना रीस्टफुल है? या क्या यह किसी प्रकार के आरईएसटी सिद्धांत का उल्लंघन करता है?

+1

"ऐसा करने के लिए _rest_ तरीका क्या है, स्क्रैपी?" –

+0

आप लंबी मतदान का उपयोग कर सकते हैं, या एक वेबसाइकिल सेवा के साथ आरईएसटी को जोड़ सकते हैं, जो क्लाइंट को ईवेंट भेजता है। – inf3rno

उत्तर

24

आपका प्रस्तावित समाधान long polling जैसा लगता है, जो वास्तव में अच्छी तरह से काम कर सकता है।

आप /game/17/move/5 का अनुरोध करेंगे और सर्वर 5 तक पूरा होने तक कोई डेटा नहीं भेजेगा। यदि कनेक्शन गिरता है, या आपको टाइम-आउट मिलता है, तो आप एक वैध प्रतिक्रिया प्राप्त होने तक बस पुनः कनेक्ट होते हैं।

इसका लाभ यह बहुत तेज़ है - जैसे ही सर्वर का नया डेटा होता है, ग्राहक इसे प्राप्त करेंगे। यह भी गिरा दिया कनेक्शन के लिए लचीला है, और काम करता है अगर ग्राहक थोड़ी देर के लिए काट दिया जाता है (आप /game/17/move/5 एक घंटे अनुरोध कर सकता है के बाद यह स्थानांतरित किया गया है और तुरंत डेटा प्राप्त है, तो move/6/ पर ले जाने और इसी तरह)

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

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

+0

मैं जावा के रूप में जेटी का उपयोग कर रहा हूं सर्वलेट कंटेनर। ऐसा लगता है कि "लंबे मतदान" के लिए ठीक है। क्या यह अपाचे (अर्थात्, कार्यकर्ता धागे से बाहर चल रहा है) जैसी ही समस्याएं हैं? टोमकैट के बारे में क्या? – Ross

+0

थ्रेड को टालने से बचने के लिए, आप एएसपीनेट असिंक्रोनस HTTP हैंडलर का उपयोग कर सकते हैं। यह थ्रेड को थ्रेड पूल पर वापस देता है। –

2

मुझे this article एक नया HTTP शीर्षलेख, "कब-संशोधित-बाद" का प्रस्ताव मिला, जो अनिवार्य रूप से वही काम करता है - सर्वर प्रतीक्षा करता है और संसाधन को संशोधित होने तक कनेक्शन को तब तक खुला रहता है।

मैं टाइमस्टैम्प-आधारित दृष्टिकोण की बजाय एक संस्करण-आधारित दृष्टिकोण पसंद करता हूं, क्योंकि यह दौड़ की स्थिति से कम प्रवण होता है और आपको यह प्राप्त करने के बारे में थोड़ी अधिक जानकारी देता है कि आप इसे पुनर्प्राप्त कर रहे हैं। इस दृष्टिकोण के लिए कोई विचार?

+0

संस्करण-आधारित दृष्टिकोण ETag HTTP शीर्षलेख का उपयोग करेगा। http://en.wikipedia.org/wiki/HTTP_ETag – Chase

2

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

+0

यह त्रुटि का दुरुपयोग है (आप वास्तविक 404 का पता कैसे लगाते हैं क्योंकि आपने अनुरोध किया है/गेम/x14 नहीं/गेम/14) .. लौटने {{त्रुटि ' : 'कोई नई सामग्री'} या कुछ कम समस्याग्रस्त नहीं होगा .. – dbr

+3

नहीं, क्योंकि चरण 14 तक नहीं बनाया गया है, संसाधन मौजूद नहीं है ... यह उचित 404 है। – Tracker1

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

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