Об этом проекте
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 и просит указывать его в титрах продукта.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.