Protocolo com muitas idas e voltas em sequência (chatty) Chatty protocol / sequential round trips
ID da causa sy-chatty · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)
Se uma única ação precisa de várias idas e voltas ao servidor, uma depois da outra, o ping é multiplicado por esse número.
Por quê Abrir a loja → pedir a lista → conferir o preço → comprar → atualizar o inventário, cada etapa em uma requisição separada → Efeito A próxima requisição só sai depois que chega a resposta da anterior → Na tela Com ping de 150 ms, quase 1 segundo para comprar uma vez. Carregamentos estranhamente longos
Ao fazer ações específicas, Logo após login ou manutenção
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Servidor: mudar o protocolo para agrupar várias etapas em uma só requisição e resposta (ex.: incluir o inventário atualizado na resposta da compra). Cliente: baixar antes os dados necessários, UI que não espera o resultado.
Números de referência
Tempo ≈ número de idas e voltas × (ping + processamento no servidor + espera do tick). Com 5 idas e voltas e ping de 150 ms, cerca de 0,85–1 s.
No gráfico
Sempre alto desde o início · Tempo de conclusão por função, idas e voltas por ação
Onde olhar
Em uma captura de pacotes no servidor (Wireshark), contar quantas vezes requisições e respostas se alternam, e com que intervalo, enquanto uma conta de teste faz uma ação como comprar na loja ou fazer login. Com log de requisições no servidor, agrupar por ID de sessão e ver o número de requisições e o horário de chegada e de resposta de cada uma
Confirma se
Em uma única ação, as requisições esperam a resposta anterior e vão e voltam várias vezes em sequência, o tempo de conclusão é aproximadamente número de idas e voltas × RTT, e quanto maior o ping da região do jogador, mais lenta fica a mesma função, na mesma proporção
Descarta se
Uma ou duas idas e voltas, mas uma resposta demora: causa no processamento do servidor ou no BD. Todos os jogadores igualmente lentos, seja qual for o ping: verificar a carga do servidor
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Fontes
Chatty I/O antipatternMicrosoft Azure Muitas requisições de I/O pequenas acumulam atraso e derrubam a responsividade. Recomendação de agrupar em menos requisições, e maiores