सर्वर-साइड और क्लाइंट-साइड प्रोग्रामिंग के बीच अंतर क्या हैं?


104

मैंने प्रश्न (मुख्य रूप से स्टैक ओवरफ्लो पर) देखे हैं, जिनमें इस बुनियादी ज्ञान का अभाव है। इस प्रश्न का उद्देश्य इसे प्राप्त करने वालों और इसके संदर्भ में जानकारी प्राप्त करने वालों के लिए अच्छी जानकारी प्रदान करना है।

वेब प्रोग्रामिंग के संदर्भ में, सर्वर-साइड प्रोग्रामिंग और क्लाइंट-साइड प्रोग्रामिंग के बीच अंतर क्या हैं? कौन सी भाषाएं किससे संबंधित हैं, और आप उनमें से प्रत्येक का उपयोग कब करते हैं?


5
सर्वर-साइड प्रोग्रामिंग सर्वर द्वारा समर्थित भाषाओं (जैसे जावा, पीएचपी, सी #; का उपयोग करके सर्वर पर चलने वाला कोड लिख रहा है; यह कोड लिखना संभव है जो सर्वर-साइड पर जावास्क्रिप्ट में निष्पादित होता है)। क्लाइंट-साइड प्रोग्रामिंग कोड लिख रहा है जो क्लाइंट पर चलेगा, और उन भाषाओं में किया जाता है जिन्हें ब्राउज़र द्वारा निष्पादित किया जा सकता है, जैसे कि जावास्क्रिप्ट।
FrustratedWithFormsDesigner

1
यह एक बहुत अच्छा है: प्रोग्रामर
.stackexchange.com

7
मुझे लगता है कि आपको उस प्रश्न में शामिल करना चाहिए जिसे आप केवल वेब प्रोग्रामिंग के लिए संदर्भित करते हैं, क्योंकि वर्तमान रूप में उत्तर पूर्ण नहीं हैं। उदाहरण के लिए, HTTP में सर्वर-क्लाइंट संचार की आवश्यकता नहीं है; ग्राहक पक्ष एक ब्राउज़र, आदि का उपयोग नहीं कर सकता है
Ktete

@ आप को जोड़ने के लिए मेरे प्रश्न को संपादित करने के लिए आपका स्वागत है।
मदारा उचिहा

2
जब वेब युवा था तब सर्वर लॉजिक (जावा / सी ++) पर अपने अधिकांश लॉजिक हैवी लिफ्टिंग को रखना अच्छा था और ब्राउजर लॉजिक को जानबूझकर पतला रखा जाता था - खासकर जब से ब्राउजर वापस आया तब प्राइम टाइम के लिए तैयार नहीं थे। अब यह जोर ऐसे उलट गया है कि ब्राउज़र आधारित टूल (Angular.js) हैं, जहां वेब एप्लिकेशन भारी उठाने वाले तर्क का थोक अब रहता है (तेजी से छीन लिया गया सर्वर साइड लॉजिक से दूर)। यह आधुनिक औद्योगिक शक्ति ब्राउज़रों द्वारा बेहद तेज जावास्क्रिप्ट इंजन (देशी कोड के एक आदेश के भीतर) चलाने की सुविधा प्रदान की गई है।
स्कॉट स्टेंसलैंड 16

जवाबों:


123

पृष्ठभूमि

वेब विकास सभी संचार के बारे में है। इस मामले में, HTTP प्रोटोकॉल पर दो (2) पार्टियों के बीच संचार:

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

प्रत्येक पक्ष की प्रोग्रामिंग, कोड को संदर्भित करती है जो विशिष्ट मशीन, सर्वर या क्लाइंट के पर चलती है।

मूल उदाहरण

  1. उपयोगकर्ता अपने वेब ब्राउज़र (खोलता ग्राहक )।
  2. उपयोगकर्ता को ब्राउज़ http://google.com
  3. ग्राहक (की ओर से उपयोगकर्ता ), के लिए अनुरोध भेजता http://google.com ( सर्वर अपने मुख पृष्ठ के लिए,)।
  4. सर्वर तो अनुरोध को स्वीकार करता है, और कुछ मेटा डेटा (बुलाया के साथ ग्राहक उत्तर हेडर ), पृष्ठ के स्रोत के द्वारा पीछा किया।
  5. ग्राहक तो पृष्ठ के स्रोत प्राप्त करता है, और renders एक मानव देखा जा सकता वेबसाइट में यह।
  6. उपयोगकर्ता प्रकार Stack Overflowखोज पट्टी में, और प्रेसEnter
  7. ग्राहक के लिए कि डेटा प्रस्तुत सर्वर
  8. सर्वर है कि डेटा प्रोसेस करता है, और खोज परिणामों से मेल खाते एक पेज के साथ उत्तर।
  9. ग्राहक , एक बार फिर से, के लिए उस पृष्ठ renders उपयोगकर्ता देखने पर।

प्रोग्रामिंग

सर्वर-साइड प्रोग्रामिंग

सर्वर-साइड प्रोग्रामिंग, सर्वर पर चलने वाले कार्यक्रमों के प्रकार का सामान्य नाम है ।

उपयोग

  • उपयोगकर्ता इनपुट की प्रक्रिया करें।
  • संकलन पृष्ठ।
  • संरचना वेब अनुप्रयोग।
  • स्थायी भंडारण (SQL, फ़ाइलें) के साथ सहभागिता करें।

उदाहरण भाषा

  • पीएचपी
  • अजगर
  • सी #, सी ++, या विज़ुअल बेसिक में ASP.Net।
  • लगभग कोई भी भाषा (C ++, C #, Java)। ये विशेष रूप से कार्य के लिए डिज़ाइन नहीं किए गए थे, लेकिन अब अक्सर एप्लिकेशन-स्तरीय वेब सेवाओं के लिए उपयोग किए जाते हैं।

क्लाइंट-साइड प्रोग्रामिंग

सर्वर-साइड की तरह, क्लाइंट-साइड प्रोग्रामिंग क्लाइंट पर चलने वाले सभी प्रोग्राम्स का नाम है ।

उपयोग

  • इंटरैक्टिव वेबपेज बनाएं।
  • वेब पेज पर गतिशील रूप से सामान बनाएं।
  • अस्थायी भंडारण, और स्थानीय भंडारण (कुकीज़, लोकलस्टोरेज) के साथ बातचीत करें।
  • सर्वर को अनुरोध भेजें, और इससे डेटा पुनर्प्राप्त करें।
  • क्लाइंट-साइड एप्लिकेशन के लिए एक दूरस्थ सेवा प्रदान करें, जैसे कि सॉफ़्टवेयर पंजीकरण, सामग्री वितरण या दूरस्थ मल्टी-प्लेयर गेमिंग।

उदाहरण भाषा

  • जावास्क्रिप्ट (मुख्य रूप से)
  • एचटीएमएल *
  • सीएसएस *
  • क्लाइंट डिवाइस पर चलने वाली कोई भी भाषा जो दूरस्थ सेवा के साथ सहभागिता करती है, क्लाइंट-साइड भाषा है।

* HTML और CSS वास्तव में "प्रोग्रामिंग भाषा" प्रति-से नहीं हैं। वे मार्कअप सिंटैक्स हैं जिनके द्वारा क्लाइंट उपयोगकर्ता के लिए पेज प्रस्तुत करता है ।


8
उपयोग के उदाहरणों के साथ एक अच्छे उत्तर के लिए +1 ! जस्ट टू नाइटपिक: एचटीएमएल और सीएसएस वास्तव में प्रोग्रामिंग भाषाएं नहीं हैं, इसलिए शायद उन्हें "PHP, ASP, और लगभग किसी भी भाषा (C ++, C #, Java)" से तुलना नहीं करनी चाहिए। ActionScript क्लाइंट-साइड भाषा का एक और अच्छा उदाहरण हो सकता है।
FrustratedWithFormsDesigner

5
आप यह पहचानने में विफल रहते हैं कि सर्वर एक सर्वर क्यों है और क्लाइंट एक क्लाइंट है। सर्वर क्लाइंट के बारे में जाना जाता है, लेकिन आसपास के अन्य तरीके से नहीं। सर्वर हर समय निष्पादित होने की उम्मीद है, कोई ग्राहक अपेक्षाएं नहीं हैं।
क्रिस मैकल

3
मैं इस तथ्य को जोड़ूंगा कि एक सर्वर वातावरण अधिक नियंत्रित है। आपको पता नहीं है कि ग्राहक क्या है। ग्राहक पक्ष करते समय भी सुरक्षा संबंधी चिंताएँ (दोनों पक्षों के लिए) होती हैं।
स्टोनमेटल

1
इसलिए इसे जोड़ें, स्वतंत्र महसूस करें।
मदार उचिहा

1
मैं @ ChrisMcCall की एक बिंदु से परिभाषा से असहमत हूं। उस नियम के अपवाद हो सकते हैं, जैसे कि एक सर्वर डेटा को संसाधित करने के लिए किसी क्लाइंट पर भरोसा कर सकता है या सर्वर को किसी कार्य को पूरा करने के लिए एक सेवा प्रदान कर सकता है। ग्राहक स्केलेबिलिटी और प्रदर्शन के लिए लोड की बढ़ती मात्रा को भी साझा कर रहे हैं जैसे एसपीए। ये तकनीकें उस परिभाषा को धुंधला करती हैं। एक बेहतर परिभाषा यह हो सकती है कि एंड-यूज़र और क्लाइंट पर्यायवाची हैं। यह अपेक्षित है कि एंड-यूज़र क्लाइंट डिवाइस में मौजूद है, जबकि अन्य सभी नोड्स को सर्वर-साइड माना जाएगा।
रयानजैक्गोवन

27

आम आदमी के शब्दों में:

यहां मैं केवल वेब प्रोग्रामिंग के बारे में बात करूंगा।

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

इसके मुख्य कार्य हैं:

  • सत्यापन इनपुट (सत्यापन सर्वर में किया जाना चाहिए। क्लाइंट में अनावश्यक सत्यापन सर्वर कॉल से बचने के लिए इस्तेमाल किया जा सकता है जब गति बहुत महत्वपूर्ण है।)
  • एनीमेशन
  • UI तत्वों में हेरफेर
  • शैलियों को लागू करना
  • जब आप पृष्ठ को इतनी बार ताज़ा नहीं करना चाहते, तो कुछ गणनाएँ की जाती हैं

प्रभारी व्यक्ति सामने अंत प्रोग्रामिंग के पता होना चाहिए :

  • जावास्क्रिप्ट
  • सीएसएस
  • एचटीएमएल
  • बुनियादी ग्राफिक डिजाइन
  • अजाक्स
  • शायद फ्लैश
  • JQuery जैसी कुछ 3 पार्टी जावास्क्रिप्ट लाइब्रेरी
  • यूआई डिजाइन
  • जानकारी डिजाइन, आदि

सर्वर साइड प्रोग्रामिंग को गतिशील सामग्री उत्पन्न करने के साथ करना है। यह सर्वर पर चलता है। इनमें से कई सर्वर "हेडलेस" हैं। अधिकांश वेब पृष्ठ स्थिर नहीं होते हैं, वे उपयोगकर्ता को अद्यतन की गई व्यक्तिगत जानकारी दिखाने के लिए एक डेटाबेस खोजते हैं। यह पक्ष बैक एंड के साथ इंटरैक्ट करता है, जैसे डेटाबेस कहते हैं।

यह प्रोग्रामिंग बहुत सी भाषाओं में की जा सकती है:

  • पीएचपी
  • जावा और जेएसपी
  • एएसपी
  • पर्ल
  • अजगर
  • पटरियों पर रूबी, आदि।

इस कोड के साथ क्या करना है:

  • डेटाबेस को छोड़ना
  • HTML में डेटा एनकोड करें
  • डेटाबेस पर जानकारी डालें और अपडेट करें
  • व्यावसायिक नियम और गणना

सर्वर साइड प्रोग्रामिंग के प्रभारी व्यक्ति को पता होना चाहिए:

  • ऊपर उल्लिखित कुछ भाषाएं
  • एचटीएमएल
  • एसक्यूएल,
  • linux / unix शेल स्क्रिप्टिंग
  • OOP
  • व्यापार नियम, आदि।

"फ्रंट एंड प्रोग्रामिंग के प्रभारी व्यक्ति को पता होना चाहिए"? मैं कहूंगा कि आप केवल HTML, CSS, जावास्क्रिप्ट और अजाक्स के साथ पूरी तरह से बच सकते हैं। यह कहते हुए कि सर्वर-साइड प्रोग्रामिंग को गतिशील सामग्री उत्पन्न करने के लिए करना है और क्लाइंट पक्ष के लिए समान नहीं कहना शायद गलत अंतर्ज्ञान देगा ...
nbro

"अधिकांश वेब पृष्ठ स्थिर नहीं होते हैं, वे उपयोगकर्ता को अद्यतन की गई व्यक्तिगत जानकारी दिखाने के लिए एक डेटाबेस खोजते हैं। यह पक्ष बैक एंड के साथ इंटरैक्ट करता है, जैसे कि डेटाबेस।" मैं इसे इस रूप में फिर से लिखूंगा: "पृष्ठ गतिशील रूप से गतिशील भागों को चर सामग्री से भरकर उत्पन्न होते हैं जो एक डेटाबेस से प्राप्त होता है। बैक-एंड पहले से ही सर्वर-साइड प्रोग्रामिंग, आईएमओ से संबंधित सब कुछ है।
nbro

फिर, सामान्य तौर पर, मैं कहूंगा "... एक व्यक्ति को पता होना चाहिए ..." और "नहीं" होना चाहिए ...
nbro

@nbro आप सिर्फ अपना जवाब क्यों नहीं लिखते हैं?

@ColeTrumbo मेरी टिप्पणी और आपके बीच क्या संबंध है? क्या लोग उन्हें बेहतर बनाने के लिए दूसरों के उत्तरों की आलोचना कर सकते हैं?
17

14

अन्य उत्तर पर जोर दिया है क्या क्लाइंट-साइड और सर्वर-साइड प्रोग्रामिंग है: कौन-सी भाषाओं ज्यादातर उपयोग किया जाता है, क्या कार्य पूरा किया जाना है, आदि

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

सुरक्षा और अनुमति

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

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

तैनाती और मंच

सर्वर-साइड प्रोग्रामिंग में, तैनाती को आपके कोड के बाहर से होता है, किसी प्रकार के टूल (भले ही वह हो make installया नहीं git clone) का उपयोग करते हुए, और यह तैनाती आमतौर पर मैनुअल होती है - या कम से कम, यह अर्ध-पर्यवेक्षण में होने की उम्मीद है मार्ग। वह सिस्टम (जिसका अर्थ है OS) जिस पर आप तैनात होते हैं, आमतौर पर कई मशीनों में समान होता है, लेकिन यह आपकी आवश्यकताओं के लिए भारी अनुकूलित हो सकता है।

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

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

राज्य और माध्यमिक प्रभाव

(डिस्क्लेमर: यह अब तक का सबसे व्यक्तिपरक बिंदु है। संभवतः मेरे तर्क में कई गलत पहलू हैं। यह सिर्फ एक दिलचस्प परिकल्पना है, मेरे विचार में।)

सर्वर-साइड प्रोग्रामिंग में, राज्य एक बहुत बड़ी चिंता है, जिसका अर्थ है कि उपयोगकर्ता के अनुरोध पर डेटा को कैसे पुनः प्राप्त करना और अपडेट करना है, क्योंकि संगामिति के कारण संघर्ष की संभावना है। भले ही इस जटिलता का अधिकांश डेटाबेस सर्वर पर लोड हो रहा है, यह सर्वर-साइड कोड की ज़िम्मेदारी है कि डेटाबेस को अपने इंटरफ़ेस के सही तरीके से उपयोग करके डेटा की अखंडता की गारंटी देने की अनुमति दें (उदाहरण के लिए अपडेट के लिए कैश का उपयोग न करें जो कि कभी नहीं देखा जाता है। DB), जबकि यह सर्वर-साइड कोड का भी एक लक्ष्य है, डेटाबेस को काम के साथ अधिभार नहीं देना और उपयोगकर्ता की प्रतिक्रिया का इंतजार करना।

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

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


3

यह किसी भी तरह से एक स्वीकृत उत्तर होने का इरादा नहीं है; बल्कि मैं इसे एक पूरक बिंदु के रूप में प्रस्तुत करता हूं ( when do you use each of themप्रश्न के उत्तर में) जिसका अभी तक अन्य उत्तरों में उल्लेख किया जाना बाकी है, अर्थात्:

बौद्धिक संपदा का संरक्षण

स्रोत कोड जो क्लाइंट-साइड (जैसे जावास्क्रिप्ट में) पर बैठता है, आसानी से पढ़ने योग्य और / या रिवर्स-इंजीनियर होने में सक्षम है यदि इसे बाधित किया गया है।

स्रोत कोड जो सर्वर-साइड पर बैठता है, लेकिन मालिकाना एल्गोरिदम को सुरक्षित रूप से संरक्षित कर सकता है और केवल परिणाम लौटा सकता है; तरह का एक ब्लैक-बॉक्स।


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

@ मादुरूचिहा, इसलिए प्रस्तावना: "यह किसी भी तरह से एक स्वीकृत उत्तर होने के इरादे से नहीं है, बल्कि मैं इसे एक पूरक बिंदु के रूप में पेश करता हूं"
कोस्टा कोंटोस

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