Что ж, есть эта книга - она немного устарела, и я никогда ее не читал, но она от авторитетного издателя. Я также нашел этот , который новее, но я никогда не слышал раньше. Оба утверждают, что охватывают вопросы разработки игр для MMO (или, по крайней мере, онлайн); При этом прогноз на стороне клиента более или менее одинаков, независимо от масштаба вашей базы одновременных игроков, и у Google есть много информации об этом .
Важно понимать, что с практической точки зрения для инди-хобби-разработчика довольно сложно собрать игру, которая будет достаточно популярной, чтобы даже собрать достаточно игроков, чтобы достичь теоретического пика параллелизма, достаточно высокого, чтобы считаться «массовым». Но методы все еще могут быть образовательными для исследования.
Есть две основные классификации вещей, которые вы можете сделать:
- Будьте агрессивны в отношении отправки только минимального объема данных минимальному набору клиентов, которым это необходимо.
- Создайте игру, которая не дает игрокам стимула слишком много собирать деньги, помогая вам в целом сократить количество «нужных клиентов».
Вторая - это действительно игровой дизайн и проблема социальных манипуляций - это особенно сложно, потому что многопользовательские игры, естественно, являются социальными, это часть их привлекательности, так что вы не хотите слишком сильно расстраивать группы игроков. С другой стороны, игру, в которой все в мире находятся в нерестовом лагере, один парень, у которого выпадает лучшая добыча в игре, будет трудно масштабировать.
Для первого варианта вы могли бы рассмотреть возможность рассылки многоуровневых сообщений - есть некоторые вещи о других игроках, которые всегда важно знать, такие как позиции. Но другие вещи, такие как здоровье, могут быть не столь важны для объектов, которые текущий игрок пока не может видеть, поэтому вы выбираете то, что отправляете этому игроку, исходя из относительного расстояния всех других объектов, находящихся рядом с ним - это, по сути, душит данные, которые вы отправляете, как вы упомянули в последнем бите вашего вопроса, а также их фильтрация.
Очень масштабные многопользовательские архитектуры также буферизуют отчеты, которые не требуют немедленных действий. Сообщения о сохранении символов, отправленные на сервер, могут быть выполнены в дельтах, с полными обновлениями только в критических точках, и эти обновления могут быть помещены в буфер на сервере регулирования, чтобы они отправлялись на сервер, который фактически содержит символьные данные в устойчивом состоянии, периодическая мода - по мере масштабирования базы проигрывателя вы должны заботиться об оптимизации дискового ввода-вывода, а также сетевого трафика. Вы не хотите, чтобы ваша база данных персонажей трэшлась.
Скорость и размер пакета сильно различаются от игры к игре, так же, как и для игр без MMO. Это действительно очень специфичная вещь, и нет общих стандартов.
В дополнение к ответу, приведенному выше, прочтите TCP_NODELAY и узнайте, как работает масштабирование окна. Понимание деталей TCP (и да, вы хотите использовать TCP, а не UDP, если перспектива обработки разностных обновлений, поступающих не по порядку, звучит для вас забавно) и повторная передача важна для контроля задержки.
источник