Gargalo no processamento de pacotes na thread principal Network processing on the main thread
ID da causa cg-net-mainthread · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
Se o cliente processa só uma quantidade fixa de pacotes recebidos por frame, os pacotes que chegam em massa vão sendo empurrados para os frames seguintes.
Por quê Em lugares cheios, chegam milhares de atualizações por segundo → Efeito A thread principal bate no limite de processamento por frame e não consegue ler tudo → Na tela Os movimentos dos outros jogadores chegam cada vez mais atrasados e são aplicados de uma vez só
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Cliente: fazer a recepção e o parsing em uma thread separada, juntar as atualizações de posição antigas da mesma entidade e aplicar só a mais recente. Servidor: em lugares cheios, enviar com menos frequência as atualizações de personagens distantes para reduzir o volume enviado.
Números de referência
Com pacotes não processados se acumulando, em poucos segundos o atraso já chega a 1 segundo inteiro de dados.
No gráfico
Sobe com a carga · Pacotes recebidos não processados, atraso entre recepção e aplicação
Onde olhar
Registrar em log quantos pacotes o cliente deixa sem processar a cada frame e o atraso entre a chegada de um pacote e sua aplicação no jogo, junto com o número de jogadores ao redor
Confirma se
Em lugares cheios, o número de pacotes pendentes e o atraso de aplicação crescem sem parar, enquanto o ping e o intervalo de envio do servidor seguem normais no mesmo momento
Descarta se
Sem atraso de aplicação, mas com os pacotes já chegando atrasados: aponta para o trecho de rede. Frame time sobe muito: “Carga de renderização com muitos personagens”
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Fontes
Actor Priority in Unreal EngineEpic Games Quando falta largura de banda, nem todos os atores são replicados toda vez; a prioridade é dada pela distância até quem está vendo e pelo tempo desde a última replicação
Replication Graph in Unreal EngineEpic Games Jogos com muitos jogadores conectados e muitos objetos replicados (MMORPGs, por exemplo) precisam agrupar por posição e enviar só o necessário para evitar gargalo de CPU no servidor