top of page

Armadilhas de netcode: mensagens que somem em silêncio

Foto do escritor: Marcel Dütscher
Marcel Dütscher
21 de jun.
1 min de leitura

Bugs de multiplayer são uma espécie à parte: nada trava, nenhum erro é registrado — simplesmente nada acontece. Duas das nossas armadilhas favoritas do nosso próprio código de rede, como aviso e para diversão.


Armadilha 1: a mensagem não registrada. Nosso protocolo de rede conhece classes de mensagem — “bloco alterado”, “jogador se moveu”, “chat”. Todo novo tipo de mensagem precisa ser registrado no codec para receber um ID e poder ser serializado. Se você esquece isso, acontece a pior coisa possível: a chamada de envio falha, mas num lugar onde o erro é engolido em silêncio. Nada de travar, nada de log — o recurso “simplesmente não funciona”. Depuramos isso mais de uma vez, até o reflexo pegar: classe de mensagem nova? Primeira pergunta: ela está registrada?


Armadilha 2: o bloco fantasma. Quando o servidor muda um bloco — por exemplo, porque um script está remodelando o terreno — ele precisa avisar ativamente todos os jogadores conectados. Se você esquece o broadcast, surge um bloco fantasma: o servidor sabe que há um bloco ali, o cliente mostra ar. O jogador esbarra numa parede invisível — ou, pior, constrói num lugar que não existe mais no servidor. Só recarregar o chunk coloca os dois mundos de volta em sintonia.


O denominador comum: no multiplayer sempre há duas verdades — a do servidor e a do cliente — e todo ponto que precisa manter as duas sincronizadas é uma armadilha em potencial. Nossa resposta foram testes que verificam exatamente essa sincronização e checklists para novas mensagens. Pouco espetacular, mas os fantasmas ficaram raros desde então.

Posts recentes

Ver tudo

Comentários


Não é mais possível comentar esta publicação. Contate o proprietário do site para mais informações.
bottom of page