![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Ситуация стандартная (платформа AS3/PHP/Memcahe/MySQL):
Есть объект "завод", в нем крутится несколько айтемов на разной степени готовности. С определенной периодичностью мы по таймеру запускаем метод "завода", проверяющий готовность продукции, и готовые айтемы перемещаем на "склад", где они суммируются по видам продукции. Перемещение оформляем следующим образом: - вызываем на сервере скрипт, который проверяет возможность операции и модифицирует две таблицы (таблицу текущего производства и таблицу склада) и в случае успеха возвращает информацию об изменениях - во флэше слушаем ответ сервера и при получении изменений учитываем их в объектах "завод" и "склад" с последующей визуализацией. Пока пользователь online, все банально. Вопрос, что делать, если производство заканчивается, когда пользователь уже отключился. Проблема в том, что другие пользователи могут заходить в его локацию и видеть, что именно у него производится, т.е., в каждый момент времени информация должна быть актуальной (плюс-минус). Я вижу три варианта: 1. Запускать кроном скрипт на сервере, который будет шерстить базу и для каждого выявленного случая завершения производства отрабатывать модификацию этих таблиц. При большом количестве игроков это будет здорово нагружать сервер, да и обновление раз в секунду не поставишь. 2. Проверять при каждом обращении к локации (не важно, кто обратился) наличие на заводе завершившихся производств с последующей отработкой перемещения продукции до выдачи информации по локации. Этот вариант мне нравится больше, но несколько усложняется процесс взаимодействия с сервером и, опять же, возрастает нагрузка на сервер. 3. Создать в базе дополнительную таблицу "завершение производства", в которую при открытии производства для конкретного айтема сразу писать время его завершения и все необходимые параметры. Тогда можно сделать скрипт, которые запускается кроном, но не ползает по всей базе, а просто отрабатывает те задания, которые пора отработать (с последующим удалением). Т.е., фактически мы эмулируем запрос на перемещение со стороны флэша. Тут все понятно, надо только как-то разрулить ситуацию, чтобы эти запросы не пересеклись, если пользователь в online. Возможно, есть более простые варианты? В общем, нужны советы от тех у кого это работает на большом количестве пользователей. |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:29. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|