Perda do burst de spawns logo após a entrada Initial spawn burst lost (unreliable channel, receive buffer, fragmentation)
ID da causa pt-spawn-burst · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do cliente (Equipe de desenvolvimento)
No instante em que o personagem entra na zona, o servidor envia de uma vez as informações de spawn de dezenas a centenas de entidades próximas. Se isso vai por um canal não confiável (unreliable), ou se o buffer de recepção estoura enquanto o socket não é lido durante o carregamento, parte se perde e não é reenviada.
Por quê Logo após a entrada, as informações de spawn chegam todas em um intervalo curto → Efeito O cliente que está carregando lê o socket tarde e o buffer de recepção do SO estoura, ou um pacote UDP grande é fragmentado e some inteiro se um único fragmento se perde. Em canal não confiável, nada é reenviado → Na tela Faltam alguns NPCs só no cliente que carrega mais devagar. Eles aparecem depois de sair do campo de visão e voltar
Logo após login ou manutenção, Em movimento ou ao trocar de mapa
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: enviar mensagens de spawn e despawn sempre por canal confiável, com retransmissão garantida, e dividir a informação inicial em partes. Cliente: receber em uma thread separada do carregamento, aumentar o buffer de recepção.
Números de referência
O padrão do buffer de recepção UDP no PC varia por SO, mas costuma ser de dezenas a centenas de KB. Se as informações de entrada de uma cidade lotada passam disso, basta o socket ficar um instante sem ser lido por causa do carregamento para estourar.
No gráfico
Pico logo após abrir ou manutenção · Volume recebido logo após a entrada, mensagens de spawn perdidas
Onde olhar
Comparar o número de mensagens de spawn que o servidor enviou logo após a entrada com o número que o cliente recebeu e ver por qual canal (confiável ou não confiável) foram. Em uma captura de pacotes no servidor, ver o volume enviado a esse jogador logo após a entrada e os pacotes fragmentados (filtro do Wireshark ip.flags.mf == 1 || ip.frag_offset > 0)
Confirma se
Foram recebidas menos mensagens do que enviadas, as que faltam estão concentradas no pico logo após a entrada, e o envio foi por canal não confiável ou os pacotes grandes foram fragmentados. Acontece mais no cliente que carrega mais devagar
Descarta se
Número enviado igual ao recebido, mas entidade invisível: foi descartada depois de recebida (“Mensagens de spawn descartadas durante o carregamento”) ou há problema no cálculo de visibilidade. Falta a qualquer momento, sem relação com a entrada: perda de pacotes na conexão
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo