Я пишу сетевую игру для iOS. При отправке пакетов с GKMatchSendDataReliable
(что я предположил, был UDP с написанным их собственным кодом приема пакетов) со скоростью 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
После двух последних испытаний результат составляет около 1000 мс.
Казалось бы, меня душит, скорее всего, мой провайдер. Поскольку это игра для iOS, люди будут использовать обычные бытовые подключения.
Когда я изменил скорость отправки пакетов так, чтобы она была в 10 раз медленнее (таким образом, 1 пакет каждые 160 мс), тесты занимали намного больше времени, но время приема-передачи оставалось неизменно низким.
[21:31:27]: я видел среднее время туда и обратно 55,289109 мс, он видел 69,032727 мс
Таким образом, похоже, чтобы поддерживать низкую задержку на соединении (и не быть «наказанным» провайдерами), я должен уменьшить скорость отправки пакетов. Имейте в виду, что это очень маленькие пакеты, например, максимум 40 байт, но я все еще ограничен.
Я ищу рекомендации о том, сколько пакетов UDP я могу отправить в секунду, чтобы избежать удушения! Есть ли где-нибудь общие рекомендации?