Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопользовательский режим и уникальность заданий 
V
    Опции темы
DenisSh
Дата 11.12.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеем
1. многопользовательская система раздачи заданий
2. таблица с заданиями (база MySQL)
3. каждому пользователю должно даваться уникальное задание

вопрос:
как сделать так чтоб каждый пользователь получал уникальное задание

пробовал ставить в таблице заданий статус что мол выбрано, а по завершении если пользователь нажимал допустим ОК менял статус на другой. но получается может возникнуть ситуация что пользователь закроет браузер или еще что нибудь сделает что статус выбрано так и подвисает у этого задания.

как тут можно элегентно решить проблему?
PM MAIL ICQ   Вверх
A1ekcandr
Дата 11.12.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



м.б. использовать тайм лимиты
PM MAIL   Вверх
DenisSh
Дата 11.12.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



в смысле использовать тайм лимиты?

появилась еще идея использовать триггеры добавив колонку времени, и на каждый апдейт проверять если статус 'выбрано' и время больше 30 минут менять статус. но боюсь если на каждый апдейт, а их может быть много, будет проверяться вся таблица то и рухнуть так все может.
PM MAIL ICQ   Вверх
A1ekcandr
Дата 11.12.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



примерно это я и имел в виду, других вариантов не вижу
PM MAIL   Вверх
DenisSh
Дата 11.12.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

можно ли создать такой класс который будет активным во время всей сессии пользователя?
PM MAIL ICQ   Вверх
A1ekcandr
Дата 11.12.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



но в этом случае возникает другая проблема что если ктото взял задание и делает его больше 30 минут то оно перейдет в статус свободного smile , думаю что пологаться что ктото закроет на крест браузер в вашем случае просто не уместно 
PM MAIL   Вверх
theworldcreator
Дата 11.12.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Используйте крон для удаление старых заданий
PM MAIL WWW ICQ   Вверх
DenisSh
Дата 11.12.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(A1ekcandr @ 11.12.2008,  13:05)
но в этом случае возникает другая проблема что если ктото взял задание и делает его больше 30 минут то оно перейдет в статус свободного smile , думаю что пологаться что ктото закроет на крест браузер в вашем случае просто не уместно

эм...мне кажется наоборот если я буду использовать триггер эта проблема может возникнуть, т.к. например я поставлю апдейт на час, а человек задание будет делать 1,5 часа тем не менее статус перейдет в свободный.
А вот если я буду полагаться на сессию(сессия это для примера, еще лучше будет вариант пока пользователь находится на странице задания) то пока пользователь сидит даже если он будет 6 часов сидеть задание свободным не станет. Т.е. хотелось бы если возможно сделать так

1. пользователь заходит на страницу заданий
2. приложение выполняет запрос на свободное задание
3. приложение ставит статус этому заданию "выбрано"
4. создается какой нибудь объект 
5. пользователю показывается страница заданий
6. если пользователь переходит на другую страницу или вообще выходит каком либо способом объект созданный на шаге 4) должен будет удалиться и в его деструкторе почистить данные

т.е. хотелось бы создать такой объект который будет активен пока страница открыта

в приложении использую смарти и получается примерно следующее

function showPage($template){
    $tasks = new Task();
    $tasks->getTask();
    //создали задания, в классе Task есть деструктор который чистит за собой
    showTaskPage($tasks,$template);
}

function showTaskPage(&$tasks,$template){
     //деструктор еще не сработал
     $template->assign_by_ref($tasks);
     //деструктор не сработал
    $template->display('tasks.tpl'); //а вот тут где то он срабатывает((((
}

PM MAIL ICQ   Вверх
A1ekcandr
Дата 11.12.2008, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вообщем алгоритм должен быть такой:

1) пользователь взял задание, задание в базе помечается как не свободное
2) проверяем есть ли пользователь на сайте, если есть то ничего не делаем, нет - помечаем задание как свободное

предыдущий пост я написал до того как увидел ваш, впринципе вы правы 

Цитата

4. создается какой нибудь объект


этот объект называется сессия

посмотрите статус в углу он лайн здесь это реализовано наверное через сессии по сути ваша задача состоит в том чтобы сделать тоже самое, все= вам придется по сути каждый раз проверять статус полтьзователей, от клиента когда он нажмет на крес все= ничего не придет

вопрос только в оптимизации

Это сообщение отредактировал(а) A1ekcandr - 11.12.2008, 13:44
PM MAIL   Вверх
theworldcreator
Дата 11.12.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В вашем случае похоже придется использовать ajax для посылке своего статуса - активен. Ну и крон чтобы просроченные записи помечал свободными.
PM MAIL WWW ICQ   Вверх
DenisSh
Дата 11.12.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(A1ekcandr @ 11.12.2008,  13:34)
вообщем алгоритм должен быть такой:

1) пользователь взял задание, задание в базе помечается как не свободное
2) проверяем есть ли пользователь на сайте, если есть то ничего не делаем, нет - помечаем задание как свободное

опять же насколько я понимаю для того проверить пользователь в онлайне или нет нужен крон, но тут может возникнуть следующая проблема

1. крон работает с переодичностью 20 минут
2. пользователь зашел на сайт и взял задание
3. пользователь не выполнил его и вышел из сайта
4. тут же он опять зашел на сайт

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



PM MAIL ICQ   Вверх
A1ekcandr
Дата 11.12.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



отредактировал выше
PM MAIL   Вверх
skyboy
Дата 11.12.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Цитата(DenisSh @  11.12.2008,  12:05 Найти цитируемый пост)
как только сеанс завершится сработает деструктор и тогда и почистить записи.

register_shutdown_function
что за задания? идеальным решением было бы генерировать задания(скажем, собирая из случайно выбранных составных частей), чтоб вне зависимости от "закрыл окно", "делает больше 30 минут" каждый пользователь получал уникальное задание.

Добавлено через 59 секунд
не, насчет register_shutdown_function глупость написал. я совсем не так понял вопрос.
PM MAIL   Вверх
DenisSh
Дата 11.12.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вообщем так как времени нет сделал через крон как тут советовали.

но на досуге все таки еще попробую поковыряться со сборщиком мусора пхп и разобраться когда там и что происходит и реально ли такие типы условий вместо крона выполнять через деструкторы. если что нибудь получится отпишусь.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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