한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Guia do Lag em Jogos › L1 Processo do jogo no cliente

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)

Abrir o card interativo, com figuras e simulações →

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ó

Sintomas
Avanço rápido, Input lag
Fatores
Paralisação, Latência
Quem é afetado
Local ou canal específico, Só eu
Quando
Quando junta muita gente
Responsável
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

  1. Actor Priority in Unreal Engine Epic 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
  2. Replication Graph in Unreal Engine Epic 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

Veja também

Mesma camada: L1 Processo do jogo no cliente

Mesmo sintoma (Avanço rápido) em outras camadas

Ver o card interativo, com figuras e simulações