2012-09-13 8 views
5

में विभिन्न उपयोगकर्ता सत्रों में राज्य को बनाए रखने के लिए मुझे विभिन्न ब्राउज़र/उपयोगकर्ता सत्रों में सर्वर पर वैश्विक स्थिति को बनाए रखने की आवश्यकता है।एक अंगूठी ऐप

मेरी धारणा यह है कि अनुरोध पर आने पर सभी परमाणु आदि उस अनुरोध के लिए विशिष्ट होते हैं। एक बार जब प्रतिक्रिया वापस आ जाती है तो वह राज्य नष्ट हो जाता है और स्मृति मुक्त हो जाती है। अगर मैं गलत हूं कृपया मुझे सही।

सत्र मध्यवर्ती उपयोग करके स्मृति में एक विशिष्ट सत्र के लिए अनुरोधों को पूरा किया जा सकता है।

हालांकि मैं कई उपयोगकर्ता सत्रों और अनुरोधों में राज्य को कैसे बनाए रखूं। यदि संभव हो तो मैं इसे बाहरी रूप से संग्रहीत करने के लिए memcached/redis आदि के उपयोग से बचना चाहता हूं। क्या इसे स्मृति में ही हासिल करना संभव है?

उत्तर

8

क्या आपका मतलब है कि आप वैश्विक सत्र चाहते हैं जो सभी सत्रों में साझा किया जाता है?

यदि ऐसा है तो उस से आसान है, बस एक परमाणु या आप की तरह किसी भी नाम स्थान में रेफरी घोषित करने और इसे सभी सत्रों में साझा किया जाएगा जैसे:

(def my-state (atom {:foo 1 :bar 2})) 

यह काम करता है क्योंकि Clojure वातावरण के रूप में लंबे समय के लिए बनी रहती है चूंकि एप्लिकेशन सर्वर चल रहा है, और भविष्य के अनुरोध वैश्विक स्थिति को देखने/संशोधित करने में सक्षम होंगे।

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

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। @ मिकरा इसके विपरीत किसी अन्य प्रकार का राज्य भी है जो अनुरोध तक ही सीमित है? मैं सर्वलेट स्तर की स्थिति का जिक्र कर रहा हूं जो जावा में उपयोगकर्ता अनुरोधों तक ही सीमित है। – murtaza52

+1

कोई म्यूटेबल स्थिति नहीं है जो अंगूठी में अनुरोध तक ही सीमित है क्योंकि आपको लगभग इसकी आवश्यकता नहीं है। रिंग मिडलवेयर जो संशोधित अनुरोध मानचित्र को पास/संभालता है अनुरोध-विशिष्ट स्थिति का सामान्य दृष्टिकोण है। –

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