@Namor14

Что использовать для написания сервера для многопользовательской игры?

Я работаю над многопользовательской игрой. Начал изучать Unity и уже добился в нем определенных успехов. Но главная проблема в том, что я не могу понять, как создать правильную архитектуру сервера, которая будет отвечать за связь между клиентом Unity и уровнем БД. Ранее я уже работал с HTTP-серверами, используя .Net Core, .Net 6 и 7. Но насколько я понимаю, HTTP-связь между клиентом и сервером для многопользовательской игры совершенно некорректна. Я немного читал о протоколах UDP и TCP и стеке технологий, которые можно использовать для реализации. Я имею в виду веб-сокеты, socket.io, Lingred.Network или SignalR. Но есть 2 вещи, которые я до сих пор не могу понять для себя. Что из этого является наиболее новым для использования, обновляемым, гибким и масштабируемым в будущем, а второе - это то, как настроить серверную архитектуру с одной из этих технологий для легкой разработки и масштабирования игровой логики. Например, мне нужно получить рейтинг, инвентарь и управлять действиями игроков и т. д. Было бы здорово получить совет и абстрактное представление об этой серверной архитектуре или может у кого то есть готовые примеры.
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Но насколько я понимаю, HTTP-связь между клиентом и сервером для многопользовательской игры совершенно некорректна.

Зависит от того, что это за игра. Если это какой-то онлайн-шутер, то да, конечно это будет некорректно, но для какой-нибудь пошаговой стратегии - это будет вполне допустимо.

Socket.io и SignalR сделаны поверх websocket, который является расширением для HTTP и построен поверх TCP.
Lidgren network сделан поверх UDP и сейчас активно не поддерживается.

Прежде чем определить, какой именно тебе протокол и подход будет применим тебе нужно ответить на следующие вопросы:
1. Какие именно данные (сообщения) нужно передавать
2. Сколько их будет генерировать один клиент
3. Сколько клиентов должен держать сервер в рамках одной игровой сессии.
4. Какие задержки допустимы для каждого из типов сообщений.
5. Как себя должна вести игра при потере каких-то сообщений и как ты можешь попробовать их компенсировать
6. Клиентом для тебя является браузер или же десктопное/мобильное приложение, или всё сразу.

После всего этого ты сможешь определить, какой протокол тебе допустим - это будет http, вебсокеты, или вообще что-то кастомное поверх UDP или TCP.
Причём для разных типов сообщений ты можешь использовать разный транспорт. Например, для передачи информации о покупках на внутриигровом рынке ты вполне можешь использовать http, а для передачи уведомлений об этих покупках - websocket, а для передвижений персонажей и их действий во внутриигровом мире - UDP, а для загрузки информации о мире и самих игроках - TCP.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы