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