Я ищу сетевые проекты и хитрости, специфичные для игр. Я знаю о нескольких проблемах, и у меня есть некоторые частичные решения некоторых из них, но могут быть проблемы, которых я пока не вижу. Я думаю, что нет однозначного ответа на это, но я приму ответ, который мне действительно нравится. Я могу думать о 4 категориях проблем.
Плохая сеть
Сообщения, отправляемые клиентами, для доступа к серверу требуется некоторое время. Сервер не может просто обрабатывать их FCFS, потому что это несправедливо по отношению к игрокам с более высокой задержкой. Частичным решением этой проблемы будут временные метки сообщений, но для этого вам понадобятся 2 вещи:
- Уметь доверять клиентам часами. (Я думаю, что это невозможно.)
- Постоянные задержки, которые вы можете измерить. Что вы можете сделать с переменной задержкой?
Многие игры используют UDP, что означает, что сообщения могут быть потеряны. В этом случае они пытаются оценить состояние игры на основе уже имеющейся информации. Как узнать, является ли оценочное состояние правильным или нет после того, как соединение снова заработало?
В MMO-играх сервер обслуживает большое количество клиентов. Каков наилучший способ распределения нагрузки? На основании местоположения в игре? Привязать группы клиентов к серверам? Можете ли вы избежать отправки всего через сервер?
Игроки покидают
Я видел 2 разных поведения, когда это происходит. В большинстве игр FPS, если игрок, который провел игру (я думаю, он сервер), уходит, остальные не могут играть. В большинстве игр RTS, если кто-либо из игроков уходит, остальные могут продолжать играть без него. Как это возможно без выделенного сервера? Все ли знают полное состояние? Они как-то переносят роль сервера?
Доступ к информации
Следующая проблема может быть решена выделенным сервером, но мне интересно, если это можно сделать без такового. Во многих играх игроки не должны знать полное состояние игры. Туман войны в RTS и стены в FPS являются хорошими примерами. Тем не менее, они должны знать, является ли действие действительным или нет. (Например, можете ли вы застрелить меня оттуда или вы находитесь на другой стороне карты.) В этом случае клиенты должны подтвердить изменения в неизвестном состоянии. Это звучит как что-то, что может быть решено с умным использованием криптографических примитивов. Есть идеи?
Обман
Некоторые из вышеперечисленных проблем просты в среде доверенного клиента, но этого нельзя допустить. Существуют ли решения, которые работают, например, в среде 80% обычного пользователя - 20% мошенника? Вы действительно можете создать античит-программу, которая работает (и не требует таких нелепых вещей, как модули ядра)?
Я прочитал эти вопросы и некоторые ответы https://stackoverflow.com/questions/901592/best-game-network-programming-articles-and-books, но другие ответы ссылаются на недоступный / ограниченный контент. Это независимый от платформы / ОС вопрос, но также приветствуются решения для конкретных платформ / ОС.