Sobre o projeto
netcode é uma biblioteca em C que implementa um protocolo seguro cliente/servidor para jogos multiplayer em tempo real sobre UDP. Ele aborda o problema comum de que UDP não oferece conceito de conexão, então desenvolvedores precisam construir gerenciamento de conexão, segurança e confiabilidade por conta própria.
Design e recursos:
- Protocolo orientado a conexão sobre UDP, permitindo que jogos troquem pacotes não confiáveis e fora de ordem sem bloqueio head-of-line do TCP.
- Conexões seguras de cliente usando tokens de conexão: apenas clientes autorizados por um backend podem conectar, adequado para fluxos de matchmaking onde um backend web emite tokens.
- Sistema de slots de cliente: servidores definem n slots; clientes recebem um slot ao conectar e são negados rapidamente quando cheio.
- Desconexões limpas e rápidas em ambos os lados para liberar slots, além de timeouts para desconexões forçadas.
- Pacotes criptografados e assinados via biblioteca sodium, protegendo contra adulteração e espionagem.
- Proteções de segurança contra pacotes maliciosos, ataques de replay e amplificação de pacotes.
- Marcação opcional de pacotes para reduzir jitter em roteadores Wi-Fi.
- Suporte a IPv4 e IPv6.
Resumo de uso: gere uma chave privada aleatória de 32 bytes mantida em segredo no servidor; crie um servidor com configuração incluindo a chave privada e o tempo máximo de vida do token de conexão; inicie com um número de slots de cliente. Clientes obtêm um token de conexão de uma API REST de backend e chamam netcode_client_connect. Após conectar, o cliente recebe um índice e pode trocar pacotes criptografados e assinados com o servidor. Exemplos estão em client.c e server.c.
O repositório contém a implementação em C. O README também lista implementações em C#, Go, Rust, Unity, UE4 e TypeScript, e aponta para o padrão netcode 1.02 e IMPLEMENTERS.md para quem escreve versões próprias. O projeto é licenciado sob BSD 3-Clause e pede créditos nos créditos do produto.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.