थ्रॉटल होने से कैसे बचें?


9

मैं एक नेटवर्क iOS गेम लिख रहा हूं। जब साथ पैकेट भेजने GKMatchSendDataReliable(जो मैं मान लिया 60 पैकेट प्रति सेकंड (आसन्न पैकेट के बीच तो 16 एमएस), औसत पिंग समय पर अपने स्वयं के पैकेट स्वागत लिखे कोड के साथ यूडीपी था) तेजी से बदतर हो: मैं एक के बाद नीचे (एक 7 GameCenter मैचों खोला ) और बस 100 पैकेटों की "बाढ़" (60 पैकेट प्रति सेकंड की दर से) भेजी। मैंने औसत राउंडट्रिप समय मापा, और ये परिणाम हैं:

[ 21:16:39 ]:  I saw an average roundtrip time of 52.342787 ms, he saw 54.496590 ms
[ 21:16:34 ]:  I saw an average roundtrip time of 62.631942 ms, he saw 61.991655 ms
[ 21:16:45 ]:  I saw an average roundtrip time of 88.394380 ms, he saw 83.619123 ms
[ 21:16:51 ]:  I saw an average roundtrip time of 179.053118 ms, he saw 156.869141 ms
[ 21:16:57 ]:  I saw an average roundtrip time of 75.025076 ms, he saw 75.419723 ms
[ 21:17:23 ]:  I saw an average roundtrip time of 8832.082488 ms, he saw 7616.877558 ms
[ 21:19:33 ]:  I saw an average roundtrip time of 25088.962344 ms, he saw 16833.064914 ms

अंतिम 2 परीक्षणों के बाद परिणाम लगभग 1000 एमएस हैं।

ऐसा लगता है कि मैं थर्रा जा रहा हूं, सबसे अधिक संभावना मेरे आईएसपी द्वारा। क्योंकि यह एक iOS गेम है, लोग नियमित आवासीय कनेक्शन का उपयोग करेंगे।

जब मैंने पैकेट भेजने की दर को 10 गुना धीमा (इसलिए 1 पैकेट प्रत्येक 160 एमएस) किया, तो परीक्षण में अधिक समय लगता है, लेकिन राउंडट्रिप समय लगातार कम रहता है।

[२१:३१:२27]: मैंने ५५.२ ms ९ २० एमएस के औसत दौर का समय देखा, उन्होंने ६ ९.०३२ ms२27 एमएस देखा

इसलिए ऐसा लगता है कि कनेक्शन पर कम विलंबता रखना (और आईएसपी द्वारा "दंडित नहीं किया जाना") मेरे द्वारा भेजे जाने वाले पैकेट की दर को कम करना है। ध्यान रखें कि ये बहुत छोटे पैकेट हैं, जैसे अधिकतम 40 बाइट्स, फिर भी मुझे थ्रोट किया जा रहा है।

मैं दिशानिर्देशों की तलाश कर रहा हूं कि कितने यूडीपी पैकेट मैं प्रति सेकंड भेज सकता हूं ताकि थ्रॉटल होने से बचा जा सके! कहीं कोई सामान्य दिशा-निर्देश तो नहीं हैं?


क्या आपने परीक्षण किया है? यदि आप 10 पैकेट / सेक पर जाते हैं तो क्या होगा? क्या आप गंभीर रूप से तबाह हो जाते हैं? यह आपके प्रश्न के अंतिम भाग का उत्तर देने में मदद कर सकता है।
3

"आप एक आदमी के बारे में बहुत कुछ बता सकते हैं कि कैसे वह आपका गला घोंटता है ..." ओह आप का मतलब था कि 'गला घोंटना' की परिभाषा: पी
केसी

सुनिश्चित करें कि आपने यूडीपी के शीर्ष पर जो भी विश्वसनीय प्रणाली बनाई है, उसके साथ आप केवल अपने कनेक्शन को संतृप्त नहीं कर रहे हैं। जब यूडीपी बाहर निकलना शुरू होता है, तो एड-हॉक रिकवरी सिस्टम सही होने के लिए थोड़ा कठिन होता है। दुर्भावना का कभी भी वर्णन नहीं किया जा सकता है ...
लार्स विकलुंड

ऐसा प्रतीत होता है कि मैंने गलती की होगी। यह फिर से NAGLES हो सकता है।
बोब्बोबो

जवाबों:


9

यहां तक ​​कि घर पीसी आधारित एक्शन गेम्स या बड़े पैराग्राफ 60Hz पर अपने पैकेट नहीं चलाते हैं। प्लस वास्तव में छोटे पैकेट आकार होना जरूरी नहीं है कि एक महान चीज है, उन छोटे पैकेटों में से हर एक को बाहर भेजने में एक बड़ा ओवरहेड होता है।

कुछ क्लाइंट-साइड इंटरपोलेशन के साथ 10Hz अपडेट के लिए शूटिंग का प्रयास करें। मुझे लगता है कि आप पहले से ही इंटरपोलिंग कर रहे हैं क्योंकि हमेशा पिंग देरी होगी।

एमटीयू के आकारों पर पढ़ें और अधिक जानकारी फेंकने के लिए लंबी समय सीमा को कवर करें। परिवहन परत पर एक औसत पैकेट आकार 1400 या तो होगा, एमटीयू आकार पर कुछ भी आपके संदेश को विभाजित करेगा और इससे भी अधिक उपरि का कारण होगा।


7

सबसे पहले, आपको यह सुनिश्चित करना होगा कि संपूर्ण डेटा कितना बड़ा है। आपके ISP द्वारा भेजे गए वास्तविक बाइट्स के बारे में सबसे अधिक ध्यान रखा जाएगा, न कि डेटाग्राम की मात्रा या आवृत्ति। यदि आप अधिकतम (65507 पेलोड ऑक्टेक्ट्स) प्रति सेकंड 60 बार आकार के डेटाग्राम भेज रहे हैं, तो आप लगभग 30 एमबी / एस अपस्ट्रीम भेज रहे हैं। हर किसी का उस तरह का संबंध नहीं है।

याद रखें कि आईपी हेडर 20 ऑक्टेट लंबा है, और यूडीपी हेडर 8 ऑक्टेट लंबा है। यह एक अतिरिक्त 28 ओकटेट्स हैं जो आप प्रत्येक डेटाग्राम के लिए भेज रहे हैं।

यदि आप अपने कनेक्शन को अधिकतम नहीं कर रहे हैं, तो ऐसे कई स्थान हैं जहां आपके पैकेट में देरी हो रही है: अर्थात् क्लाइंट का ओएस, आपका गेटवे (शायद एक वायरलेस राउटर या केबल मॉडेम), आपका आईएसपी, दूसरे पीयर का आईएसपी, दूसरे का आईरपी प्रवेश द्वार, अन्य साथियों के ओएस दूसरों के बीच में।

यदि आपने अभी तक इसका उपयोग नहीं किया है, तो मैं आपको Wireshark का उपयोग करने की सलाह देता हूं , जो नेटवर्किंग समस्याओं के निदान के लिए एक अत्यंत शक्तिशाली उपकरण है। इसे एक डिबगर के समकक्ष के रूप में सोचें, लेकिन नेटवर्किंग के लिए।

ऐसे कई तरीके हैं जिनसे आप Wireshark के साथ नेटवर्क ट्रैफ़िक का निदान कर सकते हैं:

  • मोबाइल डिवाइस के रूप में एक पीसी में Wireshark का उपयोग करें, एक सुविधाजनक हब के साथ और अपने नेटवर्क डिवाइस को आवश्यक के रूप में सेट करें

  • एक पीसी को एक वायरलेस गेटवे के रूप में सेट करें और अपने मोबाइल डिवाइस को उस गेटवे से कनेक्ट करें, फिर उक्त पीसी पर Wireshark के साथ सुनें

  • एमुलेटर के रूप में उसी मशीन में विर्सार्क चलाएं

  • डिवाइस में ही tcpdump चलाएं (Android पर आसान, iOS पर जेलब्रेक की आवश्यकता है), और फिर तारों डेटा पर कैप्चर किया गया डेटा पढ़ें

  • एक सरल प्रोग्राम बनाएं जो सटीक एक ही काम करता है, लेकिन यह एक पीसी पर काम करता है, और वहां विंडशार्क का उपयोग करें।

  • ... और बहुत सारे

आप जांचना चाहते हैं कि कौन से पैकेज भेजे जा रहे हैं, और कब। उदाहरण के लिए, यदि देरी भेजने से पहले होती है, तो आप ओएस द्वारा थ्रॉटल किए जा रहे हैं; यदि आपको उसी प्रोग्राम के डेस्कटॉप संस्करण पर भी देरी हो रही है, तो इसका मतलब है कि आप कहीं न कहीं नेटवर्क द्वारा थ्रॉटल किए जा रहे हैं।

आमतौर पर, यदि आप नेटवर्क द्वारा थ्रॉटल किए जा रहे हैं, तो आपको ICMP टाइप 4 डेटाग्राम मिलना चाहिए, ताकि आप यह जांच सकें कि वास्तव में आप थ्रॉटल कहां से प्राप्त कर रहे हैं।

अंत में, आपके पैकेज में देरी होने के कई कारण हो सकते हैं, और समस्या का समाधान करने का प्रयास शुरू करने से पहले यह पता लगाना बुद्धिमानी होगी कि समस्या कहां है।


0

ऐसा प्रतीत होता है कि मेरी एक धारणा गलत थी। इस के अनुसार :

GKMatchSendDataUnreliable मोड, तथाकथित UDP में प्रेषित होने वाली छवि। GKMatchSendDataReliable मोड छवि टीसीपी द्वारा भेजते हैं। यह आमतौर पर एक GKMatchSendDataUnreliable होना चाहिए।

वास्तविक UDP (यानी GKMatchSendDataUnreliable) को भेजने के तरीके को बदलना 60 पैकेट प्रति सेकंड की दर से कम पिंग दरों को बनाए रखता है। ऐसा लगता है कि मैं नागलों द्वारा फिर से मारा गया हूं ।

मुझे अभी भी अजीब व्यवहार मिलता है (बहुत अधिक पिंग समय के साथ अवधि), लेकिन मुझे मूल कारण (आईएसपी या नेटवर्क कंजेशन) नहीं है।

[ 10:30:33 ]:  I saw an average roundtrip time of 39.908923 ms, he saw 48.437794 ms
[ 10:30:39 ]:  I saw an average roundtrip time of 26.278577 ms, he saw 27.023854 ms
[ 10:30:48 ]:  I saw an average roundtrip time of 23.254163 ms, he saw 24.495182 ms
[ 10:30:54 ]:  I saw an average roundtrip time of 37.333127 ms, he saw 34.780404 ms
[ 10:31:03 ]:  I saw an average roundtrip time of 29.198575 ms, he saw 29.071106 ms
[ 10:31:11 ]:  I saw an average roundtrip time of 49.030299 ms, he saw 48.675459 ms
[ 10:31:18 ]:  I saw an average roundtrip time of 34.031792 ms, he saw 34.698117 ms
[ 10:31:24 ]:  I saw an average roundtrip time of 30.058642 ms, he saw 32.814952 ms
[ 10:31:30 ]:  I saw an average roundtrip time of 53.110438 ms, he saw 54.271453 ms
[ 10:31:45 ]:  I saw an average roundtrip time of 119.693933 ms, he saw 107.616359 ms
[ 10:31:50 ]:  I saw an average roundtrip time of 222.644443 ms, he saw 229.589861 ms
[ 10:31:57 ]:  I saw an average roundtrip time of 166.827070 ms, he saw 167.647724 ms
[ 10:32:05 ]:  I saw an average roundtrip time of 765.356593 ms, he saw 859.600923 ms
[ 10:32:13 ]:  I saw an average roundtrip time of 357.522686 ms, he saw 339.648654 ms
[ 10:32:24 ]:  I saw an average roundtrip time of 1115.639593 ms, he saw 1060.574401 ms
[ 10:32:39 ]:  I saw an average roundtrip time of 175.845995 ms, he saw 171.112166 ms
[ 10:32:44 ]:  I saw an average roundtrip time of 47.262925 ms, he saw 41.987869 ms
[ 10:32:52 ]:  I saw an average roundtrip time of 74.524443 ms, he saw 78.868198 ms
[ 10:33:47 ]:  I saw an average roundtrip time of 20.943917 ms, he saw 21.217377 ms
[ 10:33:52 ]:  I saw an average roundtrip time of 28.944821 ms, he saw 29.303144 ms
[ 10:34:06 ]:  I saw an average roundtrip time of 25.581624 ms, he saw 25.439416 ms
[ 10:34:13 ]:  I saw an average roundtrip time of 25.565568 ms, he saw 25.655267 ms
[ 10:34:18 ]:  I saw an average roundtrip time of 38.609394 ms, he saw 37.462835 ms

बाद में:

[ 10:38:11 ]:  I saw an average roundtrip time of 40.037623 ms, he saw 43.367524 ms
[ 10:38:21 ]:  I saw an average roundtrip time of 121.222703 ms, he saw 118.855264 ms
[ 10:38:28 ]:  I saw an average roundtrip time of 726.391897 ms, he saw 685.742454 ms
[ 10:38:33 ]:  I saw an average roundtrip time of 60.251207 ms, he saw 57.974503 ms
[ 10:38:42 ]:  I saw an average roundtrip time of 1133.909392 ms, he saw 1124.404501 ms     

तो यह छिटपुट है और लहरों में जाता है। मुझे लगता है कि मुझे अन्य पोस्टों में कुछ सुझावों की कोशिश करनी होगी जैसे कि मेरे पैकेट भेजने की दर को कम करना।

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