के साथ उच्च लेटेंसी यह समस्या विशेष रूप से नोडजित्सु से संबंधित है, लेकिन इसी तरह के प्रभाव अन्य वीपीएस पर होने लगते हैं। मेरे पास socket.io का उपयोग करके एक वास्तविक समय गेम है, और एक बात मैंने देखी है कि कभी-कभी सर्वर जवाब देने से पहले एक अनोखा समय का इंतजार करेगा। यदि उस समय सीमा के दौरान कई अनुरोध भेजे जाते हैं, तो वे व्यवहार करते हैं जैसे कि वे सभी एक बार में कतारबद्ध और संसाधित हो गए हैं। मुझे संदेह है कि यह साझा किए गए हार्डवेयर पर अन्य उपयोगकर्ताओं की उपस्थिति से बेहद सहसंबंधित है (जैसा कि किसी भी वीपीएस के मामले में है)।नोडजेएस
express = require('express')
http = require('http')
app = express()
server = http.Server(app)
io = require('socket.io').listen(server)
io.sockets.on('connection', function(sock){
sock.on('perf', function(data, cb){
cb([Date.now()]); //respond with the current time
})
})
app.get('/', function(req, res){
res.header("Access-Control-Allow-Origin", "*")
res.header("Access-Control-Allow-Methods", "HEAD,GET,PUT,POST,DELETE")
res.header("Access-Control-Allow-Headers", "X-Requested-With")
res.end(JSON.stringify([Date.now().toString()])); //http equivalent of perf function
})
server.listen(process.env.PORT || 6655, function(){
console.log('listening now')
})
मैं सॉकेट के साथ एक सरल खाली HTML पृष्ठ था:
वैसे भी, इस परीक्षण (और सुनिश्चित करें कि यह मेरे खेल के कोड की वजह से नहीं था बनाने के) के लिए, मैं एक न्यूनतम परीक्षण मामले का निर्माण किया। io जो समय-समय पर perf
घटना और समय को कॉलबैक के लिए कितना समय लगेगा।
ध्यान दें कि बार लंबाई समय की राशि, नहीं रैखिक मात्रा का वर्गमूल का प्रतिनिधित्व करता है: और यह अभी भी एक ही बात को दर्शाता है।
सॉकेट.ओओ पर निर्भर होने के बजाय, मैं वर्तमान प्रतिक्रिया समय के समान माप करने के लिए एक्सएचआर का उपयोग करता हूं, परिणाम बहुत समान है, बहुत कम विलंबता प्रतिक्रियाएं (हालांकि वेबसाकेट की तुलना में उच्च आधार रेखा के साथ, जैसा कि अपेक्षित है) और कुछ कभी-कभी स्पाइक्स जो ढेर लगते हैं।
अजीब बात यह है कि यदि आप इसे एक से अधिक ब्राउज़र विंडो और विभिन्न ब्राउज़रों में खुल, वहाँ विभिन्न ब्राउज़रों के बीच एक संबंध है (और तथ्य यह है कि यह पूरी तरह से अनुपस्थित या कुछ सर्वर पर काफी कम हो जाते है), जो लगता है हो रहा है है यह इंगित करने के लिए कि यह एक सर्वर पक्ष घटना है। हालांकि, कुछ ब्राउज़र के लिए विलंबता स्पाइक्स होती हैं लेकिन अन्य नहीं, और एक ही सत्र के दो क्रोम विंडोज़ वस्तुतः सटीक डुप्लीकेट होते हैं, जो बताते हैं कि यह ऐसा कुछ है जो स्थानीय रूप से होता है (प्रति कंप्यूटर, या प्रति ब्राउज़र, नेटवर्किंग वार)।
बाएं से दाएं करने के लिए: Chrome गुप्त, क्रोम (नियमित), फायरफॉक्स, क्रोम (नियमित)
वैसे भी, इस महीने के लिए मुझे भ्रमित किया गया है और मैं वास्तव में क्या समझ करना चाहते हैं इसका कारण बन रहा है और इसे कैसे ठीक किया जाए।
मैं उत्सुक हूं कि अगर आप सीधे सर्वर पर स्थानीय कनेक्शन खोल सकते हैं (शायद फ़ैंटोमज की तरह कुछ) और उसी माप को निष्पादित करें, यदि आप समान स्पाइक देखेंगे या नहीं। मैं भी उत्सुक हूं कि आप किस ब्राउज़र का उपयोग कर रहे हैं और क्या कोई फ़्लैश, लंबे मतदान या आईफ्रेम पर वापस आ रहा है। ऐसा लगता है कि आप सत्रों के बिना एक्सप्रेस चला रहे हैं, इसलिए यह सत्र से संबंधित जीसी या ऐसा कुछ नहीं प्रतीत होता है, और आप सकारात्मक हैं कि सर्वर पुनरारंभ या कुछ भी नहीं कर रहा है (जो संभवतः सभी ब्राउज़रों के लिए स्पाइक्स दिखाएगा एक ही समय, तो शायद नहीं, लेकिन सिर्फ पूछने के लिए)। – hoonto
मुझे लगता है कि आप पहले ही सर्वर आंकड़ों की निगरानी कर रहे हैं? उत्सुकता है कि एक ही समय में स्मृति या सीपीयू में कोई सहसंबंधित स्पाइक्स या बूंदें हैं। यदि आपके पास डेटासेंटर तक पहुंच है, तो आप वहां स्थानीय स्विच में प्लग कर सकते हैं और अधिकांश नेटवर्क हस्तक्षेप को खत्म कर सकते हैं, लेकिन शायद यह एक विकल्प नहीं है ... अगर वे डेटा के अंदर से सॉकेट.ओ निगरानी सेवा की पेशकश करते हैं तो यह अच्छा होगा। केंद्र। – hoonto
असल में, आप एक स्थानीय सॉकेट.ओ नोड क्लाइंट लिख सकते हैं और इसे उसी सर्वर पर स्थानीय रूप से चला सकते हैं, और उसे भी माप सकते हैं। आपको स्पैम करने के लिए खेद है, प्रदर्शन समस्याएं एक घास के मैदान में सुई की तरह हो सकती हैं, इसलिए बस कुछ भी फेंकने की कोशिश कर रहा हूं जिसके बारे में मैं सोच सकता हूं कि समस्या को कुछ विशिष्ट क्षेत्र में कम करने में मदद मिल सकती है। – hoonto