अधिकतम समवर्ती सॉकेट.आईओ कनेक्शन


123

यह प्रश्न पहले पूछा गया है लेकिन हाल ही में नहीं और स्पष्ट उत्तर के साथ नहीं।

Socket.io का उपयोग करना, क्या एक समवर्ती कनेक्शन की अधिकतम संख्या है जिसे आप किसी अन्य सर्वर को जोड़ने की आवश्यकता से पहले बनाए रख सकते हैं?

क्या किसी को किसी भी सक्रिय उत्पादन वातावरण का पता है जो बड़े पैमाने पर वेबस्कैट (विशेष रूप से सॉकेट.आईओ) का उपयोग कर रहे हैं? मैं वास्तव में जानना चाहता हूं कि अधिकतम कनेक्शन के लिए किस प्रकार का सेटअप सबसे अच्छा है?

क्योंकि Websockets TCP के शीर्ष पर बनाए गए हैं, इसलिए मेरी समझ यह है कि जब तक कि आप 64K पोर्ट सीमा से बंधे होने वाले कनेक्शन के बीच पोर्ट साझा नहीं करते हैं। लेकिन मैंने ग्रेट्टी का उपयोग करके 512K कनेक्शन की रिपोर्ट भी देखी है । इसलिए मुझे नहीं पता।


3
Trello एक भारी पैमाने पर उपयोग सॉकेट (विशेष रूप से, socket.io)।
जेम्स

मैंने पढ़ा कि 10,000 कनेक्शन कैप की वजह से ट्रेलो को सॉकेट.आईओ कोड को संशोधित करना पड़ा और सर्वर जोड़ने से पहले कनेक्शन के कई हजारों को बनाए रखने में सक्षम थे। अभी भी है कि और 512K के बीच अन्य सर्वर सिस्टम की एक बड़ी खाई है।
एंड्रयू

1
हालांकि यह लेख कितना पुराना है? ट्रेल्लो अभी हाल ही में प्रति माह 1 मिलियन से अधिक सक्रिय उपयोगकर्ताओं तक पहुंच गया है, इसलिए मुझे लगता है कि वे अब 10,000 से अधिक सक्रिय सॉकेट चला रहे हैं। Redis का उपयोग Trello scalability के लिए socket.io के शीर्ष पर बैठने के लिए
जेम्स

2
ट्रेलो के पास अब स्पष्ट रूप से 4 मिलियन से अधिक उपयोगकर्ता हैं, लेकिन निश्चित रूप से वे बड़ी संख्या में सर्वर पर चल रहे हैं, है ना? यह मुझे मेरे मूल प्रश्न पर वापस लाता है: प्रति सर्वर उनके वास्तविक शिखर समवर्ती उपयोगकर्ता गणना क्या है (या किसी और की)? यह जानना भी अच्छा होगा कि वे किस तरह के सर्वर / कंटेनर का उपयोग करते हैं। और क्या वे अभी भी अपना कांटा चला रहे हैं, या वे वापस मूल / स्वामी के पास हैं? इस सवाल को पूछने में मेरा एकमात्र उद्देश्य यह था कि यदि मेरी कंपनी (उस समय) 120,000 समवर्ती कनेक्शन के लिए सॉकेट.आईओ एप्लिकेशन को बनाए रखने का जोखिम उठा सकती है।
एंड्रयू

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

जवाबों:


77

यह लेख आपको रास्ते में मदद कर सकता है: http://drewww.github.io/socket.io-benchmarking/

मैं एक ही सवाल सोच रहा था, इसलिए मैंने एक छोटा सा परीक्षण (XHR- मतदान का उपयोग करके) लिखना शुरू कर दिया, जब कनेक्शन विफल होने लगे (या पीछे गिर गए)। मैंने (मेरे मामले में) पाया कि सॉकेट्स ने लगभग 1400-1800 समवर्ती कनेक्शन पर काम करना शुरू कर दिया।

यह मेरे द्वारा किए गए परीक्षण के समान एक छोटा सा झटका है: https://gist.github.com/jmyrland/353599


7
मुझे लगता है कि यह एक पुराना विषय है लेकिन मुझे यह पहली बार मिला जब मेरे प्रश्न का उत्तर खोज रहा था और आखिरकार यह मददगार साबित हुआ: rtcamp.com/tutorials/linux/increase-open-files-limit प्रति प्रक्रिया के लिए खुली फ़ाइल सीमा 1024 की नरम सीमा के लिए डिफ़ॉल्ट और 4096 की कठिन सीमा और चूंकि हर खुला टीसीपी पोर्ट एक फ़ाइल का प्रतिनिधित्व करता है, इन सीमाओं पर विचार करना महत्वपूर्ण है जब यह निर्धारित करता है कि लाइब्रेरी को अधिकतम करने की कोशिश करने से पहले मशीन कितने खुले सॉकेट की अनुमति देगा।
डेपरिड

2
@ जाम क्या आपको कभी पता चला कि आपके वेब सॉकेट्स लगभग 1400-1800 कनेक्शनों का काम क्यों कर रहे थे? मैं एक ही समस्या है, और मेरी फ़ाइल सीमा 100,000 पर सेट है, इसलिए मुझे पता है कि यह मुद्दा नहीं है। किसी भी तरह की सहायता का स्वागत किया जाएगा। धन्यवाद।
सेठ

@ सेठ: जब से मैंने पिछली बार इसकी समीक्षा की थी, तब तक यह हो चुका है, लेकिन मुझे लगता है कि यह निष्कर्ष था: एक्सएचआर मतदान में बहुत अधिक संसाधन (अन्य परिवहन विधियों के संबंध में) लगे। वेबस्कॉक का उपयोग करते समय, समवर्ती कनेक्शन की संख्या अधिक थी।
JAM

@JAM जवाब के लिए धन्यवाद। मैं ws मॉड्यूल का उपयोग करके समान मुद्दों को देख रहा हूं, सॉकेट नहीं ।io, इसलिए ws मॉड्यूल के साथ कोई भी XHR मतदान नहीं होना चाहिए। यहीं से मुझे समस्या निवारण में समस्या हो रही है। तलाश जारी है।
सेठ

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

16

मैंने AWS पर socket.io का उपयोग करने की कोशिश की, मैं लगभग 600 कनेक्शन स्थिर रख सकता हूं।

और मुझे पता चला कि यह इसलिए है क्योंकि सॉकेट.आईओ ने पहले लंबे मतदान का इस्तेमाल किया और बाद में वेबसैट में अपग्रेड किया गया।

जब मैं केवल वेबसैट का उपयोग करने के लिए कॉन्फ़िगरेशन सेट करता हूं, तो मैं लगभग 9000 कनेक्शन रख सकता हूं।

इस कॉन्फिग को क्लाइंट साइड पर सेट करें:

const socket = require('socket.io-client')
const conn = socket(host, { upgrade: false, transports: ['websocket'] })

2
क्या आपने EC2 का उपयोग किया, किस प्रकार का उदाहरण? t2.micro, t2.nano?
bvdb

2
क्या आपने वेबसाइड्स को बाध्य करते समय जवाबदेही में अंतर देखा?
लॉरेन

क्या आप जानते हैं कि आपका उदाहरण किस आकार का था? इसके अलावा, भविष्य में किसी को भी पता है कि कुछ पुराने ब्राउज़र WebSockets का समर्थन नहीं करते हैं, यही वजह है कि उन्नयन कुछ के लिए महत्वपूर्ण हो सकता है।
रयान सोडरबर्ग

हम कैसे परीक्षण कर सकते हैं कि सर्वर कितना कनेक्शन का समर्थन करता है? आपने इसे 9000 कनेक्शन कैसे मापे? कृपया सुझाव दें ..
जिज्ञासु डेवलपर

15

ऐसा प्रतीत होता है कि यह व्यक्ति एक ही Node.js सर्वर पर 1 मिलियन से अधिक समवर्ती कनेक्शन रखने में सफल रहा है।

http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/

यह मेरे लिए बिल्कुल स्पष्ट नहीं है कि वह कितने बंदरगाहों का उपयोग कर रहा था।


13
सॉकेट के साथ नहीं। मैं सोचता हूं और वेबस्कैट के साथ भी नहीं। आदमी लंबे मतदान का उपयोग कर रहा था जो मुझे लगता है कि कम संसाधन भूख है।
टिम 333

6

+ 300 k समवर्ती कनेक्शन के लिए:

इन चर को इसमें सेट करें /etc/sysctl.conf:

fs.file-max = 10000000 
fs.nr_open = 10000000

इसके अलावा, इन चरों को इसमें बदलें /etc/security/limits.conf:

* soft nofile 10000000
* hard nofile 10000000
root soft nofile 10000000
root hard nofile 10000000

और अंत में, टीसीपी बफर को /etc/sysctl.confभी बढ़ाएँ :

net.ipv4.tcp_mem = 786432 1697152 1945728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216

अधिक जानकारी के लिए कृपया https://www.linangran.com/?p=547 देखें


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