Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Кто как разруливает игровую ситуацию с производством если пользователь offline? (http://www.flasher.ru/forum/showthread.php?t=138689)

mikhailk 14.04.2010 12:04

Кто как разруливает игровую ситуацию с производством если пользователь offline?
 
Ситуация стандартная (платформа AS3/PHP/Memcahe/MySQL):

Есть объект "завод", в нем крутится несколько айтемов на разной степени готовности. С определенной периодичностью мы по таймеру запускаем метод "завода", проверяющий готовность продукции, и готовые айтемы перемещаем на "склад", где они суммируются по видам продукции. Перемещение оформляем следующим образом:
- вызываем на сервере скрипт, который проверяет возможность операции и модифицирует две таблицы (таблицу текущего производства и таблицу склада) и в случае успеха возвращает информацию об изменениях
- во флэше слушаем ответ сервера и при получении изменений учитываем их в объектах "завод" и "склад" с последующей визуализацией.

Пока пользователь online, все банально.

Вопрос, что делать, если производство заканчивается, когда пользователь уже отключился. Проблема в том, что другие пользователи могут заходить в его локацию и видеть, что именно у него производится, т.е., в каждый момент времени информация должна быть актуальной (плюс-минус).

Я вижу три варианта:

1. Запускать кроном скрипт на сервере, который будет шерстить базу и для каждого выявленного случая завершения производства отрабатывать модификацию этих таблиц. При большом количестве игроков это будет здорово нагружать сервер, да и обновление раз в секунду не поставишь.

2. Проверять при каждом обращении к локации (не важно, кто обратился) наличие на заводе завершившихся производств с последующей отработкой перемещения продукции до выдачи информации по локации. Этот вариант мне нравится больше, но несколько усложняется процесс взаимодействия с сервером и, опять же, возрастает нагрузка на сервер.

3. Создать в базе дополнительную таблицу "завершение производства", в которую при открытии производства для конкретного айтема сразу писать время его завершения и все необходимые параметры. Тогда можно сделать скрипт, которые запускается кроном, но не ползает по всей базе, а просто отрабатывает те задания, которые пора отработать (с последующим удалением). Т.е., фактически мы эмулируем запрос на перемещение со стороны флэша. Тут все понятно, надо только как-то разрулить ситуацию, чтобы эти запросы не пересеклись, если пользователь в online.

Возможно, есть более простые варианты?

В общем, нужны советы от тех у кого это работает на большом количестве пользователей.


Часовой пояс GMT +4, время: 10:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.