अन्य सर्वर-साइड फ्रेमवर्क से Node.js कैसे भिन्न है?


21

मैंने देखा है कि Node.js बहुत लोकप्रिय हो गया है, और मैंने कई लोगों को इसमें छोटे पैमाने पर प्रोजेक्ट करते हुए देखा है।

मैंने Node.js क्या कर सकते हैं, इसका अंदाजा लगाने के लिए मैंने पेशेवरों और विपक्ष सूचियों को देखा है, लेकिन मैं अभी भी स्पष्ट नहीं हूं कि यह दूसरे से कैसे अलग है, PHP, पर्ल या रूबी जैसे अधिक परिपक्व सर्वर-साइड तकनीक। रेल।

क्या, विशेष रूप से, Node.js को वर्तमान विकल्पों से अलग करता है, और क्यों?


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

यह लेने के लिए एक छोटी सी नाइट है , लेकिन अगर आप उद्धृत वाक्यांश "नोड.जेएस" पर गूगल करते हैं तो आपको लगभग 3 मिलियन हिट मिलते हैं।
पीटर रोवेल

@Peter, हाँ, मैंने कोशिश की कि, और तुम सही हो। लेकिन 3 मिलियन अभी भी दो बहुत है। आप एक साल बाद वापस आ सकते हैं, और यह आंकड़ा संभवत: 10 मिलियन हो गया है। :)
सईद नेमाटी

3
@ मर्क, उत्कृष्ट संपादन के लिए धन्यवाद। यह अब साफ है।
सईद नेमाटी

जवाबों:


18

दो महत्वपूर्ण चीजें हैं जो Node.js को मौजूदा सर्वर-साइड फ्रेमवर्क, एसिंक्रोनस इवेंट्स और जावास्क्रिप्ट के उपयोग को प्रोग्रामिंग भाषा के रूप में अलग बनाती हैं।

अतुल्यकालिक घटनाएं

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

इवेंट ड्रिवेन आर्किटेक्चर भी देखें

जावास्क्रिप्ट

जावास्क्रिप्ट प्रोग्रामिंग भाषा है जो वेब एप्लिकेशन क्लाइंट पर उपयोग कर रहे हैं। सर्वर-साइड पर एक ही भाषा का उपयोग करने का मतलब है कि डेवलपर क्लाइंट और सर्वर दोनों पर अपने जावास्क्रिप्ट ज्ञान को लागू कर सकता है, और जरूरत के अनुसार समान कार्यों का उपयोग कर सकता है।

मैं रयान डाहल के साथ Node.js के लिए प्रस्तुति का सुझाव दूंगा जहां वह अधिक विस्तार से Node.js घटना-संचालित वास्तुकला की व्याख्या करता है।


2
यह आसानी से अब तक का सबसे अच्छा जवाब है, लेकिन मैं एसिंक्रोमस इवेंट्स को सबसे पहले रखूंगा, क्योंकि यह वास्तव में Node.js को सर्वर-साइड फ्रेमवर्क के रूप में आकर्षक बनाता है। हालांकि अच्छी नौकरी, अतुल्यकालिक I / O और स्केलेबिलिटी का उल्लेख करना। उसी का दिल है।
एडम क्रॉसलैंड

खैर @ जोनास, मुझे अभी भी समझ नहीं आया है। ASP.NET भी इवेंट-आधारित है। फिर Node.js और ASP.NET के बीच अंतर क्या है? क्या यह केवल इसलिए है क्योंकि यह अतुल्यकालिक है? उस स्थिति में, मुझे लगता है कि ASP.NET में मल्टी-थ्रेडिंग का उपयोग वही कर सकता है, है न?
सईद नेमाटी

3
@Saeed: ASP.NET थ्रेडेड और सिंक्रोनस है, उदाहरण के लिए डेटाबेस को एक्सेस करते समय, थ्रेड ब्लॉक किया जाता है और डेटाबेस से उत्तर की प्रतीक्षा कर रहा है। और कई थ्रेड्स का उपयोग करते समय (उदाहरण के लिए एक अनुरोध) बहुत सी मेमोरी का उपयोग किया जाता है (प्रत्येक थ्रेड को मेमोरी की काफी मात्रा की आवश्यकता होती है), जो एक अड़चन हो सकती है। Node.js संदेशों को भेजता है और घटनाओं पर प्रतिक्रिया करता है, इसलिए यह कभी भी (उम्मीद) धागे को अवरुद्ध नहीं करता है। नोड.जेएस के साथ आप उसी प्रोग्रामिंग मॉडल का उपयोग कर रहे हैं जो क्लाइंट साइड पर अजाक्स ( एसिंक्रोनस जावास्क्रिप्ट और एक्सएमएल), और उसी भाषा के साथ कर रहे हैं।
जोनास

आप इसके पीछे महान खुले स्रोत समुदाय को भूल गए।
रेयनोस

3
जब C # 5 नए asyncसामान के साथ चारों ओर घूमता है, हालांकि वह बदल सकता है। मुद्दा यह नहीं है कि आप अन्य भाषाओं में स्केलेबल एसिंक्रोनस कोड नहीं लिख सकते हैं, यह है कि अच्छी भाषा समर्थन के बिना (सही ढंग से) करना अधिक कठिन है।
डेवि

6

इसकी भिन्नता क्योंकि इसकी घटना संचालित है । यह सर्वर को अत्यधिक स्केलेबल बनाता है।

संक्षेप में;

धागा मॉडल

  1. ग्राहक कुछ माँगता है
  2. सर्वर बंद हो जाता है और अनुरोध को संसाधित करता है
  3. इसे क्लाइंट को वापस देता है
  4. एक नया अनुरोध संसाधित करने के लिए तैयार है

इवेंट मॉडल

  1. ग्राहक कुछ माँगता है
  2. सर्वर प्रसंस्करण के लिए अनुरोध को पारित करता है। एक नया अनुरोध संसाधित करने के लिए तैयार है
  3. सर्वर अधिक अनुरोधों को संभालता है क्योंकि वे अंदर आते हैं
  4. अनुरोध के पूरा होने पर सर्वर क्लाइंट को डेटा वापस देता है

@, आप ईवेंट-चालित से क्या मतलब है? ASP.NET WebForms भी घटना पर ही आधारित है और आप की तरह संचालकों को देख सकते हैं Session_Startedया Context_Authenticatedया Page_Load?
सईद नेमाटी

1
इसे ईवेंट-चालित कहना अधिक आवश्यक है, और यह वास्तव में Node.JS के दिल में नहीं आता: अतुल्यकालिक I / O।
एडम क्रॉसलैंड

2

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

  • कोड फ़ाइलों को सर्वर और क्लाइंट के बीच साझा किया जा सकता है, सिस्टम के दो पक्षों को संभालने के लिए प्रयास के दोहराव को रोकना।
  • डेवलपर्स को भाषाओं के बीच मानसिक रूप से स्विच करने की आवश्यकता नहीं है। (मेरी राय में बड़ी बात नहीं)
  • आर्किटेक्ट्स को वेब सॉल्यूशन बनाते समय कई भाषाओं को चुनने की जरूरत नहीं होती है।
  • कोई है जो कभी भी सर्वर-साइड कोड विकसित नहीं करता है, अब एक अलग भाषा सीखे बिना ऐसा कर सकता है। (मूल्यवान तर्क होने की संभावना नहीं, IMHO)

नोड.जेएस लोकप्रिय है क्योंकि यह तेज है और अच्छी तरह से तराजू है। यह जावास्क्रिप्ट में है अच्छा है, लेकिन काफी हद तक आकस्मिक है।
एडम क्रॉसलैंड

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

@ एडडम: नोड क्यों लोकप्रिय हो रहा है जब पहले से ही ऐसी तकनीकें हैं जो "तेज और तराजू" के लिए उपयुक्त हैं? - क्योंकि यह जावास्क्रिप्ट है।
जॉन फिशर

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

@ डेवी 8: मेरा अनुमान है कि सभी आपके द्वारा उपयोग किए गए अन्य फ्रेमवर्क / सिस्टम पर निर्भर करता है। आपके द्वारा वर्णित मापनीयता का आसानी से उपयोग किए जाने वाले उपकरणों के साथ पहले से ही सरल है। मेरे दृष्टिकोण से Node.js की एकमात्र चीज़ जावास्क्रिप्ट स्वाद है, जो सम्मोहक नहीं है।
जॉन फिशर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.