Estou escrevendo um jogo para iOS em rede. Ao enviar pacotes com GKMatchSendDataReliable
(que eu assumi ser UDP com seu próprio código de recepção de pacotes gravados) a 60 pacotes por segundo (16 ms entre pacotes adjacentes), os tempos médios de ping pioram rapidamente: abri 7 correspondências do GameCenter abaixo (uma após a outra ) e simplesmente enviou uma "inundação" de 100 pacotes (a uma taxa de 60 pacotes por segundo). Eu medi o tempo médio de ida e volta, e estes são os resultados:
[ 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
Após os últimos 2 testes, os resultados estão em torno de 1000 ms.
Parece que estou sendo estrangulado, provavelmente pelo meu ISP. Por ser um jogo para iOS, as pessoas usarão conexões residenciais regulares.
Quando alterei a taxa de envio de pacotes para 10 vezes mais lenta (portanto, 1 pacote a cada 160 ms), os testes demoram muito mais, mas os tempos de ida e volta permanecem consistentemente baixos.
[21:31:27]: vi um tempo médio de ida e volta de 55.289109 ms, ele viu 69.032727 ms
Portanto, parece manter baixa latência na conexão (e não ser "punido" pelos ISPs). Tenho que reduzir a taxa de pacotes que envio. Lembre-se de que são pacotes muito pequenos, com no máximo 40 bytes, mas ainda estou sendo acelerado.
Estou procurando orientações sobre quantos pacotes UDP posso enviar por segundo para evitar ser acelerado! Existem diretrizes gerais em algum lugar?