Piszę grę sieciową na iOS. Kiedy wysyłam pakiety z GKMatchSendDataReliable
(który, jak zakładałem, to UDP z zapisanym własnym kodem odbioru pakietów) z prędkością 60 pakietów na sekundę (czyli 16 ms między sąsiednimi pakietami), średni czas pingowania gwałtownie się pogarsza: otworzyłem 7 meczów GameCenter poniżej (jeden po drugim) ) i po prostu wysłał „powódź” 100 pakietów (w tempie 60 pakietów na sekundę). Zmierzyłem średni czas podróży w obie strony, a oto wyniki:
[ 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
Po ostatnich 2 testach wyniki wynoszą około 1000 ms.
Wydawałoby się, że jestem dławiony, najprawdopodobniej przez mojego dostawcę usług internetowych. Ponieważ jest to gra na iOS, ludzie będą korzystać ze zwykłych połączeń domowych.
Kiedy zmieniłem szybkość wysyłania pakietów na 10-krotnie wolniejszą (czyli 1 pakiet co 160 ms), testy trwają znacznie dłużej, ale czasy rundy są niezmiennie niskie.
[21:31:27]: Widziałem średni czas w obie strony 55.289109 ms, widział 69.032727 ms
Wygląda więc na to, aby utrzymać małe opóźnienie połączenia (i nie zostać „ukaranym” przez ISP). Muszę zmniejszyć szybkość wysyłanych pakietów. Pamiętaj, że są to bardzo małe pakiety, na przykład maksymalnie 40 bajtów, ale wciąż jestem dławiony.
Szukam wskazówek, ile pakietów UDP mogę wysłać na sekundę, aby uniknąć ograniczenia przepustowości! Czy są jakieś ogólne wytyczne?