2012-05-12 8 views
5

मुझे पता है कि नोड.जेएस एक साथ लगातार लगातार कनेक्शन रखने में अच्छा है, उदाहरण के लिए, कई सारे चैटर्स के लिए चैट रूम।nodejs - क्यों नोड.जेएस बड़ी संख्या में एक साथ लगातार कनेक्शन संभाल सकता है?

मुझे आश्चर्य है कि यह कैसे प्राप्त करता है। मेरा मतलब है कि वैसे भी यह टीसीपी/आईपी का उपयोग कर रहा है जो अंतर्निहित ओएस द्वारा encapsulated है, क्यों यह निरंतर कनेक्शन को इतनी अच्छी तरह से संभाल सकता है कि अन्य नहीं कर सकते हैं?

इसमें जादू की बात क्या है?

+5

@ मार्टिनजम्स: मुझे लगता है कि हमने उन समयों को छोड़ दिया है जब जेएस स्क्रिप्ट किड्स का डोमेन था। भाषावादी टिप्पणी को छीनने की कोई ज़रूरत नहीं है। – Amadan

+0

@ अहमदन ओपी सवाल व्यवसाय प्रचार होने के कगार पर है। यह 'वास्तविक समस्याओं का सामना करने वाले व्यावहारिक, उत्तरदायी प्रश्न' की तरह नहीं लगता है, (faq)। एक भाषावादी टिप्पणी उचित लग रहा था। मैंने इसे कम नहीं किया या बंद करने के लिए मतदान नहीं किया क्योंकि एक मौका है कि यह एक वास्तविक सवाल है। –

+0

@ मार्टिनजम्स: नहीं, अगर आपको लगता है कि कोई सवाल एसओ से संबंधित नहीं है, तो एफएक्यू के लिए एक सूचक उचित है, न कि। क्या आप उसी तरह उत्तर देंगे यदि प्रश्न [node.cs] (https://github.com/Rduerden/Node.cs) के बारे में था, तो अन्य सभी चीजें समान हैं? – Amadan

उत्तर

6

Node.js सभी I/O असीमित बनाता है। यह केवल एक धागे में चलता है, लेकिन I/O पर प्रतीक्षा करते समय अन्य अनुरोध या संचालन करेगा।

इसके विपरीत, क्लासिकल वेब सर्वर एक और अनुरोध नहीं करेगा जब तक कि पिछले एक पूरी तरह से नहीं किया जाता है। इस कारण से, अपाचे एक ही समय में कई प्रक्रियाएं चलाता है; आइए मान लें कि 10 httpd प्रक्रियाएं हैं, जिसका सामान्यतः मतलब है कि किसी भी समय (*) पर 10 अनुरोधों परोसा जा सकता है। यदि प्रक्रियाओं को पूरा करने में अधिक समय लगता है, तो आप कम अनुरोधों को पूरा करेंगे - या प्रक्रिया को और कुछ भी नहीं करना पड़ेगा, भले ही प्रक्रिया कुछ भी नहीं कर रही हो - जैसे डेटाबेस को चबाने और डेटा वापस करने की प्रतीक्षा करना।

एक node.js प्रक्रिया, डेटाबेस के पास जाने वाले अनुरोध के साथ सामना करने के लिए डेटाबेस को छोड़ देता है, जबकि यह किसी अन्य अनुरोध की सेवा करने के लिए डेटाबेस को छोड़ देता है।

*) एमपीएम यह बिल्कुल सही नहीं बनाता है, लेकिन सभी उद्देश्यों और उद्देश्यों के लिए पर्याप्त है।

+1

मैं बहुत उत्सुक हूं कि यदि नोड.जेएस सिर्फ गैर-अवरुद्ध आईओ का उपयोग कर रहा है, तो अपाचे जैसे अन्य दिग्गज ऐसी गैर-अवरुद्ध चीज़ क्यों नहीं बना पाएंगे? Httpd इस प्रकार के ढांचे में क्यों संशोधित नहीं किया जा रहा है? और वे कर सकते हैं? –

+1

सुरक्षा। अपाचे वह करता है जो यह अच्छा करता है; एक-दूसरे से अनुरोध अलग करना इसका एक हिस्सा है। हालांकि, जब भी आप अनुरोध अलग नहीं करना चाहते हैं, तो अपाचे इससे बहुत अच्छी तरह से निपट नहीं पाता है; हालांकि फ्यूजन पैसेंजर और फास्टसीजीआई मदद करते हैं। ध्यान रखें: अपाचे मुख्य रूप से स्थैतिक पृष्ठों की सेवा करता है; बाकी सब कुछ सीजीआई, या प्लगइन्स (अपाचे मॉड्यूल) के माध्यम से जाता है। इस प्रकार, I/O के लिए अपाचे को अनुकूलित करना गाड़ियां खींचने के लिए हंस अनुकूलित करने जैसा है। (दूसरी तरफ, रूबी या पायथन की बात करते समय, दोनों एक ही काम कर सकते हैं node.js उनके संबंधित एसिंच पुस्तकालयों - इवेंटमैचिन या ट्विस्टेड के माध्यम से करता है।) – Amadan

0

ठीक है, बात यह है कि अधिकांश वेब सर्वर (जैसे अपाचे इत्यादि ..) थ्रेड स्पॉन्गिंग का उपयोग करके काम करता है, जहां वे प्रत्येक आने वाले HTTP अनुरोध के लिए एक नया धागा फैलाते हैं। ये थ्रेड सिंक्रोनस और प्रकृति में अवरुद्ध होते हैं => जिसका अर्थ है कि वे कोड को क्रम में क्रमबद्ध कर देंगे और किसी और गणना को वर्तमान I/O या गणना कार्य द्वारा अवरुद्ध कर दिया जाएगा। जैसे कि आप किसी घटना के लिए सुनना चाहते हैं - चैट के द्वारा चैट सबमिशन आपको प्रति उपयोगकर्ता समर्पित थ्रेड होना चाहिए (प्रति उपयोगकर्ता लगातार कनेक्शन बनाए रखने के लिए आवश्यक है, कुछ संभावित अनुकूलन तकनीकें हैं लेकिन फिर भी आप प्रति थ्रेड मान सकते हैं उपयोगकर्ता) इस घटना को सुनना और इस धागे को इस घटना के होने का इंतजार अवरुद्ध कर दिया जाएगा। तो किसी भी धागे के लिए वेब-सर्वर

दूसरी तरफ जावास्क्रिप्ट प्रकृति => द्वारा अचयनित (और असीमित कोड के लिए प्रवाहकीय) है। यहां आप किसी ईवेंट के लिए कॉलबैक पंजीकृत करते हैं और जब भी यह कुछ कॉलबैक फ़ंक्शन होता है निष्पादित किया जाएगा। यह किसी भी समय इस घटना की प्रतीक्षा में अवरुद्ध नहीं होगा।

आप गैर-अवरुद्ध या असीमित सर्वर के बारे में पढ़कर इसके बारे में अधिक जानकारी प्राप्त कर सकते हैं।

+0

जावास्क्रिप्ट एसिंक्रोनस नहीं है, node.js है। जावास्क्रिप्ट केवल प्रथम श्रेणी की नागरिकता के कारण, असीमित कोडिंग शैली (या बल्कि, निरंतर उत्तीर्ण शैली) के लिए प्रवाहकीय है; लेकिन जावास्क्रिप्ट में विशेष रूप से असीमित कुछ भी नहीं है। – Amadan

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