![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Привет всем. Интересует то, каким образом обычно организовывается архитектура клиент-серверного взаимодействия, когда серверов может быть несколько. Как этим серверам сообщаться между собой? К примеру, во время игры игроки совершают разные действия (тратят свои виртуальные деньги, соблюдают правила игры, т.е. накапливают какую-то свою статистику). На каждом сервере, допустим по 2 тыс. игроков, база одна, по мере необходимости можно добавлять дополнительные сервера. Что делать с игровыми_данными/статистикой? Действия игроков сразу же фиксировать в БД? Или хранить всё в рантайме (как-то сообщаясь между серверами), а информацию в БД помещать, например, только тогда, когда игрок делает login/logout? Вобщем интересны мнения, может у кого-то был опыт.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
чем реже ты вносишь данные в БД, тем меньше на нее нагрузка (тем быстрее работает). Но при этом выше задержки обновления состояний. Поэтому, данные которые не влияют на текущий игровой процесс следует не вносить постоянно в БД.
С другой стороны, можно сделать так, чтобы сервера общались друг с другом и передавали текущую информацию напрямую. Например, игрок, подключенный к серверу1, вступает в бой с двумя другими игроками (сервер2 и сервер3). Эти сервера через установленное подключение производят обмен информацией о текущих координатах игроков и пр. напрямую, минуя БД. Благодаря этому значительно снижается нагрузка на БД за счет распределения на задействованные в баталии сервера. |
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Спасибо, что хоть кто-то выразил мнение=)
Это всё понятно, но вот конкретный пример: допустим, есть игра в покер (клиент-сервер), но надо чтобы сервер был не один, а несколько (но БД, видимо, одна). Как им сообщаться между собой? Если игрок "живёт" на сервере1, то все его действия дублировать на "сервер2" (на случай если упадёт сервер1 к примеру)? А на случай если что-то с сетью, то лучше и на сервер3. Или сами действия не дублировать, но периодически передавать на ведомые серверы только полные состояния главного сервера? В то же время если ляжет сервер1, то главным должен стать какой-то другой, который продолжит раздавать состояния?... Просто покер предполагает создание игровых столов, т.е. стол - это объект, который должен быть создан каким-либо из серверов и передан остальным. Стол меняет своё состояние в зависимости от действий игроков. А есть ещё разные задержки времени во время игры (к примеру, ожидание хода от игрока). Что если сервер упадёт во время такого ожидания? Делать ожидание на каждом из серверов, а вдруг рассинхрон по времени? Моментов много...Интересно как синхронизировать такие сервера. Да и вообще хотелось бы чего-нибудь почитать на эту тему по-подробнее, чтобы делать "как правильно и давно проверено". Это сообщение отредактировал(а) serghd - 30.1.2013, 01:03 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
А может просто забить на состояния? Для игрока в азартные игры главное что? Деньги. Вот их исинхронизируй с БД постоянно. А остальное только в контрольных точках.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |