यूनिक्स सॉकेट - क्लाइंट सर्वर मॉडल

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

ग्राहक प्रक्रिया

यह प्रक्रिया है, जो आम तौर पर सूचना के लिए अनुरोध करती है। प्रतिक्रिया मिलने के बाद, यह प्रक्रिया समाप्त हो सकती है या कुछ अन्य प्रसंस्करण कर सकती है।

Example, इंटरनेट ब्राउज़र क्लाइंट एप्लिकेशन के रूप में काम करता है, जो एक HTML वेबपेज प्राप्त करने के लिए वेब सर्वर को एक अनुरोध भेजता है।

सर्वर प्रक्रिया

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

Example - वेब सर्वर इंटरनेट ब्राउजर के अनुरोधों का इंतजार करता रहता है और जैसे ही उसे ब्राउज़र से कोई रिक्वेस्ट मिलती है, वह एक अनुरोधित एचटीएमएल पेज को चुनता है और उसे वापस उस ब्राउजर में भेज देता है।

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

2-स्तरीय और 3-स्तरीय आर्किटेक्चर

दो प्रकार के क्लाइंट-सर्वर आर्किटेक्चर हैं -

  • 2-tier architecture- इस आर्किटेक्चर में, क्लाइंट सीधे सर्वर के साथ इंटरैक्ट करता है। इस प्रकार की वास्तुकला में कुछ सुरक्षा छेद और प्रदर्शन समस्याएं हो सकती हैं। इंटरनेट एक्सप्लोरर और वेब सर्वर दो स्तरीय वास्तुकला पर काम करते हैं। यहां सिक्योर सॉकेट लेयर (एसएसएल) का उपयोग कर सुरक्षा समस्याओं का समाधान किया जाता है।

  • 3-tier architectures- इस आर्किटेक्चर में क्लाइंट और सर्वर के बीच एक और सॉफ्टवेयर बैठता है। इस मध्य सॉफ्टवेयर को 'मिडलवेयर' कहा जाता है। मिडिलवेयर का इस्तेमाल भारी सुरक्षा के मामले में सभी सुरक्षा जांचों और भार संतुलन बनाने के लिए किया जाता है। एक मिडलवेयर क्लाइंट से सभी अनुरोधों को लेता है और आवश्यक प्रमाणीकरण करने के बाद, यह उस अनुरोध को सर्वर से पास करता है। फिर सर्वर आवश्यक प्रसंस्करण करता है और प्रतिक्रिया को मिडलवेयर में भेजता है और अंत में मिडलवेयर इस प्रतिक्रिया को क्लाइंट को वापस भेज देता है। यदि आप 3-स्तरीय आर्किटेक्चर को लागू करना चाहते हैं, तो आप अपने वेब सर्वर और वेब ब्राउज़र के बीच वेब लॉजिक या वेबस्फीयर सॉफ्टवेयर जैसे किसी भी मिडलवेयर को रख सकते हैं।

सर्वर के प्रकार

आपके पास दो प्रकार के सर्वर हो सकते हैं -

  • Iterative Server- यह सर्वर का सबसे सरल रूप है जहां एक सर्वर प्रक्रिया एक क्लाइंट को सेवा देती है और पहला अनुरोध पूरा करने के बाद, यह दूसरे क्लाइंट से अनुरोध लेती है। इस बीच, एक और ग्राहक इंतजार करता रहता है।

  • Concurrent Servers- इस प्रकार का सर्वर एक बार में कई अनुरोधों को पूरा करने के लिए कई समवर्ती प्रक्रियाएं चलाता है क्योंकि एक प्रक्रिया में अधिक समय लग सकता है और दूसरा ग्राहक इतने लंबे समय तक इंतजार नहीं कर सकता है। यूनिक्स के तहत एक समवर्ती सर्वर लिखने का सबसे सरल तरीका प्रत्येक ग्राहक को अलग से संभालने के लिए एक बच्चे की प्रक्रिया को कांटा करना है।

क्लाइंट कैसे बनाये

कनेक्शन स्थापित करने के लिए सिस्टम कॉल क्लाइंट और सर्वर के लिए कुछ अलग हैं, लेकिन दोनों में एक सॉकेट का मूल निर्माण शामिल है। दोनों प्रक्रियाएं अपनी-अपनी कुर्सियां ​​स्थापित करती हैं।

क्लाइंट साइड पर सॉकेट स्थापित करने में शामिल कदम इस प्रकार हैं -

  • के साथ एक सॉकेट बनाएं socket() सिस्टम कॉल।

  • सर्वर का उपयोग करके सर्वर के पते पर सॉकेट कनेक्ट करें connect() सिस्टम कॉल।

  • डेटा भेजें और प्राप्त करें। इसे करने के कई तरीके हैं, लेकिन सबसे सरल तरीका है इसका उपयोग करनाread() तथा write() सिस्टम कॉल।

कैसे एक सर्वर बनाने के लिए

सर्वर साइड पर सॉकेट स्थापित करने में शामिल कदम इस प्रकार हैं -

  • के साथ एक सॉकेट बनाएं socket() सिस्टम कॉल।

  • सॉकेट को किसी पते का उपयोग करके बांधें bind()सिस्टम कॉल। इंटरनेट पर एक सर्वर सॉकेट के लिए, एक पता होस्ट मशीन पर एक पोर्ट नंबर होता है।

  • के साथ कनेक्शन के लिए सुनो listen() सिस्टम कॉल।

  • के साथ एक कनेक्शन स्वीकार करें accept()सिस्टम कॉल। जब तक कोई क्लाइंट सर्वर से कनेक्ट नहीं होता है तब तक यह कॉल कनेक्शन को ब्लॉक कर देता है।

  • का उपयोग करके डेटा भेजें और प्राप्त करें read() तथा write() सिस्टम कॉल।

क्लाइंट और सर्वर इंटरेक्शन

निम्नलिखित क्लाइंट और सर्वर इंटरेक्शन दिखाते हुए आरेख है -