2012-10-19 21 views
23

तो मैं node.js और socket.io का उपयोग कर रहा हूँ। मेरे पास यह छोटा प्रोग्राम है जो टेक्स्ट बॉक्स की सामग्री लेता है और इसे node.js सर्वर पर भेजता है। फिर, सर्वर इसे अन्य कनेक्टेड क्लाइंट पर वापस ले जाता है। एक चैट सेवा की तरह लेकिन बिल्कुल नहीं।मैं सॉकेट.मैट के माध्यम से कितना डेटा भेज सकता हूं?

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

+2

आप जितना चाहें उतना डेटा भेज सकते हैं। यहां तक ​​कि बड़ी वीडियो फाइलें भी। यहां एकमात्र मुद्दा स्केलेबिलिटी है, यानी आप कितने उपयोगकर्ता इसे प्रसारित करना चाहते हैं? लेकिन आप वैसे भी इस तरह की समस्याओं को मार देंगे। – freakish

+0

जब भी मैं बेस 64encoded स्ट्रिंग के रूप में 20 एमबी फ़ाइल डेटा उत्सर्जित कर रहा हूं तो कमरे के भीतर अन्य व्यक्ति प्राप्त करने में सक्षम है, लेकिन यदि यह अधिक है तो 23 एमबी फ़ाइल डेटा प्राप्त करने में सक्षम नहीं है .. क्या मेरे लिए कोई समाधान है –

उत्तर

59

नोड और सॉकेट.ओओ में कोई अंतर्निहित सीमा नहीं है। आपको इस बारे में चिंता करने की ज़रूरत है कि संदेश के आकार, प्रति सेकेंड भेजने वाले संदेशों की संख्या, कनेक्टेड क्लाइंट की संख्या और बैंडविड्थ आपके सर्वर – पर उपलब्ध अन्य शब्दों में कोई आसान जवाब नहीं है।

चलो 10 केबी संदेश पर विचार करें। जब 10 क्लाइंट जुड़े होते हैं, तो उस डेटा के 100 केबी डेटा की मात्रा होती है जिसे आपके सर्वर को धक्का देना पड़ता है, जो पूरी तरह से उचित है। अधिक ग्राहकों में जोड़ें, और चीजें जल्दी से अधिक मांग हो रही हैं: 10 केबी * 5,000 ग्राहक = 50 एमबी।

बेशक, आपको प्रोटोकॉल ओवरहेड की मात्रा पर भी विचार करना होगा: प्रति पैकेट, टीसीपी ~ 20 बाइट्स जोड़ता है, आईपी 20 बाइट जोड़ता है, और ईथरनेट 14 बाइट जोड़ता है, कुल 54 बाइट्स जोड़ता है। 1500 बाइट्स के एमटीयू मानते हुए, आप प्रति क्लाइंट 8 पैकेट देख रहे हैं (रीट्रांसमिट्स को अनदेखा कर रहे हैं)। इसका मतलब है कि आप वायर पर 8 * 54 = 432 बाइट ओवरहेड + 10 केबी पेलोड = 10,672 बाइट प्रति क्लाइंट भेजेंगे।

10.4 केबी * 5000 ग्राहक = 50.8 एमबी।

एक 100 एमबीपीएस लिंक पर, आप 5,000 ग्राहकों अगर आप लिंक को परिपूर्ण करने में सक्षम हो करने के लिए एक 10 kB संदेश देने के लिए एक सैद्धांतिक न्यूनतम 4.3 के सेकंड देख रहे हैं। बेशक, गिराए गए पैकेट और दूषित डेटा की असली दुनिया में रीट्रांसमिट की आवश्यकता होती है, इसमें अधिक समय लगेगा।

10 केबी के बहुत ही रूढ़िवादी अनुमान के साथ भी 10 केबी से 5,000 ग्राहकों को भेजने के लिए, यह शायद चैट रूम में ठीक है जहां प्रत्येक 10-20 सेकंड में एक संदेश आता है।

  1. कितना बैंडविड्थ अपने सर्वर (रों) उपलब्ध होगा:

    तो सच में, यह नीचे कुछ सवाल करने के लिए, महत्व के क्रम में आता है?

  2. कितने उपयोगकर्ता एक साथ जुड़े रहेंगे?
  3. प्रति मिनट कितने संदेश भेजे जाएंगे?

उन प्रश्नों के उत्तर के साथ, आप अपने बुनियादी ढांचे का समर्थन करने वाले संदेश का अधिकतम आकार निर्धारित कर सकते हैं।

+1

यह एक शानदार जवाब है। इसे निचले स्तर पर समझाने के लिए धन्यवाद। लेकिन प्रति ग्राहक 8 पैकेट कहां से आए थे? इसके अलावा, किसी कारण से मैं सोच रहा था कि 512 बाइट्स या सॉकेट के साथ ऐसा कुछ था। यकीन नहीं है कि मुझे यह कहां मिला। जबरदस्त हंसी। धन्यवाद – cbmeeks

+1

1500 बी के ईथरनेट [एमटीयू] (http://en.wikipedia.org/wiki/Maximum_transmission_unit) के साथ, प्रत्येक पैकेट का अधिकतम पेलोड आकार 1500 बी -40 बी (टीसीपी + आईपी ओवरहेड) = 1460 बी भेजने के लिए डेटा के 10,240 बी, न्यूनतम 8 पैकेट भेजे जाने चाहिए (1460 * 7 = 10220 - पर्याप्त नहीं; भेजने के लिए 20 और बाइट हैं। 1460 * 8 = 11,680)। – josh3736

+0

बहुत बढ़िया। क्या वे 8 पैकेट एक ही समय में या क्रमशः भेजे जाएंगे? या कुछ यादृच्छिक क्रम में? मुझे पता है कि यह थोड़ा ओटी है लेकिन मैं जवाब की सराहना करता हूं। :-) – cbmeeks

2

2-10k ठीक है, कोई लागू सीमा या कुछ भी नहीं है, यह बैंडविड्थ और व्यावहारिकता के लिए नीचे आता है .. चीजों की भव्य योजना में 10k छोटा है, इसलिए यदि आप कुछ हद तक ठीक हो तो ठीक होना चाहिए आपके लिए ऊपरी बाध्य

+2

सीपीयू भी एक बाधा हो सकती है। मुझे लगता है कि हर कोई सीपीयू को अनदेखा कर रहा है क्योंकि उसके संदेश बहुत बड़े और कम हैं।नेटवर्क बाधा को पहले प्रकट करने के कारण ... –

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