Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многосерверная игра 
:(
    Опции темы
serghd
Дата 29.1.2013, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



Привет всем. Интересует то, каким образом обычно организовывается архитектура клиент-серверного взаимодействия, когда серверов может быть несколько. Как этим серверам сообщаться между собой? К примеру, во время игры игроки совершают разные действия (тратят свои виртуальные деньги, соблюдают правила игры, т.е. накапливают какую-то свою статистику). На каждом сервере, допустим по 2 тыс. игроков, база одна, по мере необходимости можно добавлять дополнительные сервера. Что делать с игровыми_данными/статистикой? Действия игроков сразу же фиксировать в БД? Или хранить всё в рантайме (как-то сообщаясь между серверами), а информацию в БД помещать, например, только тогда, когда игрок делает login/logout? Вобщем интересны мнения, может у кого-то был опыт.
PM MAIL   Вверх
bsa
Дата 29.1.2013, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



чем реже ты вносишь данные в БД, тем меньше на нее нагрузка (тем быстрее работает). Но при этом выше задержки обновления состояний. Поэтому, данные которые не влияют на текущий игровой процесс следует не вносить постоянно в БД.
С другой стороны, можно сделать так, чтобы сервера общались друг с другом и передавали текущую информацию напрямую. Например, игрок, подключенный к серверу1, вступает в бой с двумя другими игроками (сервер2 и сервер3). Эти сервера через установленное подключение производят обмен информацией о текущих координатах игроков и пр. напрямую, минуя БД. Благодаря этому значительно снижается нагрузка на БД за счет распределения на задействованные в баталии сервера.
PM   Вверх
serghd
Дата 30.1.2013, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 5.10.2009

Репутация: нет
Всего: нет



Спасибо, что хоть кто-то выразил мнение=)
Это всё понятно, но вот конкретный пример: допустим, есть игра в покер (клиент-сервер), но надо чтобы сервер был не один, а несколько (но БД, видимо, одна). Как им сообщаться между собой? Если игрок "живёт" на сервере1, то все его действия дублировать на "сервер2" (на случай если упадёт сервер1 к примеру)? А на случай если что-то с сетью, то лучше и на сервер3. Или сами действия не дублировать, но периодически передавать на ведомые серверы только полные состояния главного сервера? В то же время если ляжет сервер1, то главным должен стать какой-то другой, который продолжит раздавать состояния?... Просто покер предполагает создание игровых столов, т.е. стол - это объект, который должен быть создан каким-либо из серверов и передан остальным. Стол меняет своё состояние в зависимости от действий игроков. А есть ещё разные задержки времени во время игры (к примеру, ожидание хода от игрока). Что если сервер упадёт во время такого ожидания? Делать ожидание на каждом из серверов, а вдруг рассинхрон по времени? Моментов много...Интересно как синхронизировать такие сервера. Да и вообще хотелось бы чего-нибудь почитать на эту тему по-подробнее, чтобы делать "как правильно и давно проверено".

Это сообщение отредактировал(а) serghd - 30.1.2013, 01:03
PM MAIL   Вверх
bsa
Дата 30.1.2013, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



А может просто забить на состояния? Для игрока в азартные игры главное что? Деньги. Вот их исинхронизируй с БД постоянно. А остальное только в контрольных точках.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0976 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.