Об этом проекте

netcode — это библиотека на C, реализующая безопасный клиент-серверный протокол для многопользовательских игр в реальном времени поверх UDP. Она решает распространённую проблему: UDP не имеет понятия соединения, поэтому разработчикам приходится самостоятельно реализовывать управление соединением, безопасность и надёжность. Дизайн и возможности: - Соединение поверх UDP, благодаря чему игры могут обмениваться ненадёжными неупорядоченными пакетами без блокировки начала очереди, свойственной TCP. - Безопасные клиентские подключения с помощью connect tokens: подключаться могут только клиенты, авторизованные бэкендом, что подходит для сценариев матчмейкинга, когда веб-бэкенд выдаёт токены. - Система клиентских слотов: серверы определяют n слотов; клиенту назначается слот при подключении, и при заполнении сервер быстро отказывает. - Быстрое чистое отключение с любой стороны для освобождения слотов, а также таймауты для жёстких обрывов соединения. - Шифрование и подпись пакетов через библиотеку sodium, что защищает от подделки и перехвата. - Защита от вредоносных пакетов, replay-атак и packet amplification-атак. - Опциональная маркировка пакетов для снижения джиттера на Wi-Fi-роутерах. - Поддержка IPv4 и IPv6. Общая схема использования: сгенерируйте случайный 32-байтовый приватный ключ, который хранится в секрете на сервере; создайте сервер с конфигурацией, включающей приватный ключ и максимальное время жизни connect token; запустите его с заданным числом клиентских слотов. Клиенты получают connect token от бэкенд REST API и вызывают netcode_client_connect. После подключения клиент получает client index и может обмениваться с сервером зашифрованными и подписанными пакетами. Пример кода приведён в client.c и server.c. Репозиторий содержит реализацию на C. В README также перечислены реализации на C#, Go, Rust, Unity, UE4 и TypeScript, а также даны ссылки на стандарт netcode 1.02 и IMPLEMENTERS.md для тех, кто пишет собственные версии. Проект распространяется под лицензией BSD 3-Clause и просит указывать его в титрах продукта.