2010-08-04 16 views
18

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

मुझे आशा है कि मेरा प्रश्न समझ में आता है।

+2

आपको यह जवाब मिल सकता है (http://stackoverflow.com/questions/3106452/java-servlet-instantiation-and-session-variables/3106909#3106909) सहायक भी। – BalusC

उत्तर

35

प्रत्येक अनुरोध एक अलग सूत्र में नियंत्रित किया जाता है। यह "प्रति उपयोगकर्ता धागा" नहीं है। अनुरोध क्लाइंट (वेब ​​ब्राउज़र) और सर्वर से कोई बातचीत है। तो, एक ब्राउज़र में एक यूआरएल टाइप करना, एक AJAX अनुरोध का आह्वान करना, प्रत्येक को एक अलग थ्रेड में संभाला जाता है।

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

हाँ आपको बहुत सावधान अगर आप नए सूत्र बंद आग होना चाहिए; आप चीजों को तोड़ सकते हैं, और आम तौर पर यह एक बुरा विचार है। यदि आपको ऐसा कुछ करना चाहिए जो लंबे समय तक लगेगा, तो जो भी असीमित रूप से है उसे संभालने के लिए जेएमएस का उपयोग करें। यह भी याद रखें कि वेब अनुप्रयोग डेटा को प्रभावित करने वाले सभी कार्यों को वेबैप से नहीं बुलाया जाना चाहिए। आईई (आप क्वार्ट्ज अनुसूचक की तरह कुछ का उपयोग कर एक नौकरी लिख सकते हैं, या यहां तक ​​कि एक अलग प्रोग्राम लिख सकते हैं और एक क्रॉन में चलाने के लिए इसे सेट अप हो - एक काम है कि डेटा दैनिक स्कैन करता है एक अलग कार्य में या बिल्ला से बाहर के रूप में चलाया जा सकता है हालांकि, वेबपैड के नीचे से डेटा बदलने के काम से सावधान रहें)।

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

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

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

+1

विस्तृत उत्तर के लिए धन्यवाद। तब कोई वेब ऐप में समवर्ती कार्य कैसे करता है? क्या यह आम तौर पर इससे बचा जाता है भले ही आप इसका प्रदर्शन कर सकें? – user377067

+2

समवर्ती द्वारा आपका क्या मतलब है? यदि कोई अनुरोध एक कार्य शुरू करता है जो लंबे समय तक लेगा, तो आपको असीमित रूप से संभालना होगा। जेएमएस का उपयोग करना यहां जवाब है। विचार यह है कि आप एक कतार या विषय (और आरंभिक अनुरोध समाप्त होता है) को एक संदेश भेजते हैं, और एक बीन (संदेश संचालित बीन) कतार या विषय देखने के लिए कॉन्फ़िगर किया गया है और उस पर संदेश का उपभोग करता है, और कुछ समय लेने पर आधारित होता है संदेश। इसे कार्यान्वित करने के तरीके के बारे में जानने के लिए आपको इसे Google करना होगा, लेकिन यह मुश्किल नहीं है। – hvgotcodes

+0

मैं इसकी सराहना करता हूं। – user377067

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