Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.04.2010, 12:04
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 1  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
По умолчанию Кто как разруливает игровую ситуацию с производством если пользователь offline?

Ситуация стандартная (платформа AS3/PHP/Memcahe/MySQL):

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

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

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

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

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

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

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

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

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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