2011-09-07 6 views
11

मैं node.js/socket.io का उपयोग कर चैट सर्वर करने पर विचार कर रहा था। क्या मुझे इसे एक टीसीपी सर्वर या http सर्वर बनाना चाहिए? मुझे लगता है कि टीसीपी सर्वर अधिक कुशल होगा, लेकिन क्या आप इसे अन्य सामान भेज सकते हैं जैसे फ़ाइल संलग्नक इत्यादि? यदि टीसीपी अधिक कुशल है, तो और भी कितना? साथ ही, यह सोचकर कि कितने समवर्ती कनेक्शन एक node.js सर्वर संभाल सकता है? क्या यह टीसीपी या HTTP करने के लिए और अधिक काम है?चर्चा: node.js के माध्यम से चैट सर्वर: HTTP या टीसीपी?

उत्तर

25

आप यहां 2 पूरी तरह से अलग दृष्टिकोणों की बात कर रहे हैं - टीसीपी एक परिवहन परत प्रोटोकॉल है और HTTP एक अनुप्रयोग परत प्रोटोकॉल है। HTTP (आमतौर पर) टीसीपी पर काम करता है, इसलिए आप जो भी विकल्प चुनते हैं, वह अभी भी टीसीपी पर काम करेगा।

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

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

मुझे node.js कनेक्शन सीमा के बारे में निश्चित रूप से पता नहीं है, लेकिन मैं विश्वास की उचित मात्रा के साथ कह सकता हूं कि यह ऑपरेटिंग सिस्टम द्वारा सीमित है। This आपको उस प्रश्न के उत्तर के साथ पकड़ने में मदद कर सकता है।

यह बहस योग्य है कि यह टीसीपी या HTTP के साथ ऐसा करने के लिए अधिक काम है या नहीं - यह दोनों में ऐसा करने के लिए बहुत काम है। मैं शायद टीसीपी विकल्प की ओर आपकी सबसे अच्छी शर्त होने की ओर झुकता हूं। जबकि टीसीपी के लिए आपको एक प्रोटोकॉल के बजाय/साथ ही एक प्रोटोकॉल तैयार करने की आवश्यकता होगी, HTTP विशेष रूप से लाइव सर्वर, चैट सर्वर जैसे 2-तरफा अनुप्रयोगों के लिए उपयुक्त नहीं है। HTTP पर चैट के कई कार्यान्वयन हैं जो AJAX का उपयोग करते हैं, लेकिन मैं आपको दर्दनाक अनुभव से बता सकता हूं कि वे पीछे के अंत में एक पूर्ण दर्द हैं।

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

लंबे मतदान और सर्वर पुश (read this) का उपयोग कर HTTP पर इसे लागू करने के तरीके हैं लेकिन यह लागू करने के लिए एक वास्तविक दर्द हो सकता है।

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

मुझे लगता है कि इस विषय पर कहने के लिए बहुत कुछ है लेकिन अभी मैं इसे शब्दों में नहीं डाल सकता - मैं इस उत्तर को किसी बिंदु पर बढ़ा सकता हूं।

+0

क्या आपको कोई विचार है कि node.js/socket.io क्लाइंट साइड के साथ tcp कैसे करें? मेरे पास यह प्रश्न यहां सूचीबद्ध है: http://stackoverflow.com/questions/7340475/client-side-tcp-with-node-js-socket-io – Derek

+0

btw। बहुत समझाओ के लिए धन्यवाद। इसकी बहुत मदद है। हालांकि, क्या आप टीसीपी पर udp और इसके फायदे/नुकसान के बारे में और अधिक समझा सकते हैं? बहुत बहुत धन्यवाद! – Derek

+0

क्या यूडीपी पैकेट नुकसान चैट ऐप को प्रभावित करता है? – Derek

2

चैट सर्वर नोड में हैलो वर्ल्ड प्रोग्राम हैं। Http का प्रयोग करें।

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

इसके अलावा, http://search.npmjs.org/ देखें और कुछ पॉइंटर्स के लिए chat खोजें।

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

  • कोई संबंधित समस्या नहीं^_^