स्टेटलेस बनाम स्टेटफुल - मैं कुछ ठोस जानकारी का उपयोग कर सकता था


94

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

मुझे लगता है कि यह जानना महत्वपूर्ण है, क्योंकि मेरा मानना ​​है कि अगर मैं इसे समझ सकता हूं, तो मैं बेहतर कोड (जैसे कि मन में दानेदारता) लिख सकता हूं।

वैसे भी, वास्तव में कम है, यहाँ मुझे पता है कि 'स्टेट स्टेटस बनाम स्टेटलेस:

स्टेटफुल (जैसे WinForms): डेटा को आगे उपयोग के लिए संग्रहीत करता है, लेकिन किसी एप्लिकेशन की मापनीयता को सीमित करता है, क्योंकि यह CPU या मेमोरी सीमा द्वारा सीमित है

स्टेटलेस (जैसे ASP.NET - हालाँकि ASP ViewStates के साथ स्टेटफुल होने की कोशिश करता है): एक्शन पूरा होने के बाद, डेटा ट्रांसफर हो जाता है, और इंस्टेंस थ्रेड पूल (Amorphous) को वापस सौंप दिया जाता है।

जैसा कि आप देख सकते हैं, यह बहुत अस्पष्ट और सीमित जानकारी है (और सर्वर इंटरैक्शन पर काफी ध्यान केंद्रित किया गया है), इसलिए मैं वास्तव में आभारी रहूंगा यदि आप मुझे जानकारी के कुछ और स्वादिष्ट बिट्स प्रदान कर सकें :)

जवाबों:


58

मेरा सुझाव है कि आप स्टैकऑवरफ्लो में एक प्रश्न से शुरू करें जो स्टेटलेस प्रोग्रामिंग के फायदों पर चर्चा करता है। यह कार्यात्मक प्रोग्रामिंग के संदर्भ में अधिक है, लेकिन आप जो पढ़ेंगे वह अन्य प्रोग्रामिंग प्रतिमानों में भी लागू होता है।

स्टेटलेस प्रोग्रामिंग एक फ़ंक्शन की गणितीय धारणा से संबंधित है, जिसे जब समान तर्कों के साथ बुलाया जाता है, तो हमेशा समान परिणाम लौटाते हैं। यह कार्यात्मक प्रोग्रामिंग प्रतिमान की एक प्रमुख अवधारणा है और मुझे उम्मीद है कि आप उस क्षेत्र में कई प्रासंगिक लेख ढूंढ पाएंगे।

एक और क्षेत्र जिसे आप अधिक समझ हासिल करने के लिए अनुसंधान कर सकते हैं वह है रेस्टफुल वेब सेवाएं। ये डिजाइन "स्टेटलेस" हैं, अन्य वेब प्रौद्योगिकियों के विपरीत जो किसी तरह राज्य रखने की कोशिश करते हैं। (वास्तव में आप क्या कहते हैं कि ASP.NET स्टेटलेस है। सही नहीं है - ASP.NET ViewState का उपयोग करके राज्य को बनाए रखने के लिए कड़ी मेहनत करता है और निश्चित रूप से स्टेटफुल के रूप में विशेषता रखता है। दूसरी तरफ ASP.NET MVC एक स्टेटलेस तकनीक है)। कई जगह हैं जो Restful वेब सेवाओं (जैसे यह ब्लॉग स्पॉट) की "स्टेटलेसनेस" पर चर्चा करते हैं , लेकिन आप फिर से एक एसओ प्रश्न से शुरू कर सकते हैं ।


ठीक है, जानकारी के लिए धन्यवाद, मुझे लिंक पर एक नज़र थी और मुझे कुछ दिलचस्प जानकारी मिली! हालांकि मैं अभी भी अधिक के लिए खुला हूं;)
टीम-जोकी

मैंने एक और क्षेत्र जोड़ा है जो स्टेटफुल और स्टेटलेस एक महत्वपूर्ण कारक है (रेस्टफुल वेब सर्विसेज)।
किंजनाककिस २

जानकारी के लिए धन्यवाद! मैं आपके उत्तर को वोट करूंगा लेकिन मेरे पास अभी तक पर्याप्त नहीं है _ _>
टीम-जोकी

कई वेब एप्स स्टेटफुल बीकॉज हैं। एक ही साइन अप पृष्ठ उपयोगकर्ता क्रेडिट के लिए अलग-अलग परिणाम देता है ... पहली बार साइन अप करने पर सफलता मिलेगी ... दूसरी बार उसी इनपुट साइनअप के साथ विफल हो जाएगा .... क्योंकि वेबैप में उपयोगकर्ता का राज्य कहीं संग्रहीत है .. .it डेटाबेस या डिफरेंट स्टोरेज हो सकता है
अच्छा और प्रोग्रामिंग

85

स्टेटलेस का मतलब है, अतीत की कोई याद नहीं। प्रत्येक लेन-देन ऐसा किया जाता है जैसे कि यह पहली बार किया जा रहा हो।

स्टेटफुल का अर्थ है कि अतीत की स्मृति है। पिछले लेनदेन को याद किया जाता है और वर्तमान लेनदेन को प्रभावित कर सकता है।

राज्यविहीन:

// The state is derived by what is passed into the function

function int addOne(int number)
{
    return number + 1;
}

स्टेटफुल:

// The state is maintained by the function

private int _number = 0; //initially zero

function int addOne()
{
   _number++;
   return _number;
}

से देखें: /software/101337/whats-the-difference-between-stateful-and-stateless


73

एक स्टेटफुल ऐप वह है जो चालू होने के बाद से क्या हुआ या बदल गया है, इसके बारे में जानकारी संग्रहीत करता है। किसी भी सार्वजनिक जानकारी के बारे में कि वह किस "मोड" में है, या कितने रिकॉर्ड संसाधित किए गए हैं, या जो कुछ भी है, वह इसे स्टेटफुल बनाता है।

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


18

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


यकीन नहीं होता कि session identifierहर अनुरोध पर पारित होने को स्टेटलेस माना जा सकता है। मेरे विचार से, ऐसे मामले को राज्यवार माना जाएगा। यदि, हालांकि, आप हमेशा tokenउपयोगकर्ता के लिए पास करते हैं, लेकिन कोई भी अन्य राज्य नहीं रखते हैं, तो यह स्टेटलेस है। लेकिन स्टेटफुल एक्सडी लगता है। यह कितना भ्रामक है।
7hi4g0

4

ऑनलाइन ट्रांसफर किया गया पैसा एक खाते से दूसरे खाते में भेजा जाता है, क्योंकि रसीद खाते में प्रेषक के बारे में जानकारी होती है। एक व्यक्ति से दूसरे व्यक्ति को नकदी सौंपना, यह लेन-देन स्टेटलेस है, क्योंकि नकद प्राप्त होने के बाद देने वाले की पहचान नकदी के साथ नहीं होती है।


1

बस दूसरों के योगदान को जोड़ने के लिए .... एक और तरीका यह एक वेब सर्वर और संगामिति के दृष्टिकोण से देख रहा है ...

HTTP एक कारण से प्रकृति में स्टेटलेस है ... एक वेब सर्वर के मामले में, स्टेटफुल होने का मतलब है कि उसे अपने अंतिम कनेक्शन के लिए किसी उपयोगकर्ता के 'स्टेट' को याद रखना होगा, और / या किसी आवश्यकताकर्ता के लिए एक खुला कनेक्शन रखना होगा। यह बहुत महंगा और हजारों समवर्ती कनेक्शन के साथ एक आवेदन में 'तनावपूर्ण' होगा ...

इस मामले में स्टेटलेस होने के कारण संसाधनों का स्पष्ट कुशल उपयोग होता है ... अर्थात अनुरोध और प्रतिक्रिया के एक ही उदाहरण में कनेक्शन का समर्थन करें ... कनेक्शन खुले रखने का कोई ओवरहेड और / या पिछले अनुरोध से कुछ भी याद न रखें ...


-3

हम सत्र ऑब्जेक्ट का उपयोग करके HTTP स्टेटलेस व्यवहार को ओवरराइड करके Webapps को स्टेटफ़ुल बनाते हैं। जब हम सत्र objets स्टेट का उपयोग करते हैं, तब भी हम केवल HTTP का उपयोग करते हैं।


-3

मुझे स्टेटफुल v / s स्टेटलेस क्लास डिज़ाइन के बारे में समान संदेह था और कुछ शोध किया था। बस पूरा किया और मेरे निष्कर्ष मेरे ब्लॉग में पोस्ट किए गए हैं

  • एंटिटी क्लासेस को स्टेटफुल होना चाहिए
  • हेल्पर / वर्कर वर्ग स्टेटफुल नहीं होना चाहिए।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.