Траблы при запуске одной копии скрипта для конкретного пользователя.

  • Автор темы barracuda477
  • Дата начала

barracuda477

Guest
Траблы при запуске одной копии скрипта для конкретного пользователя.

Дано: Есть некий скрипт abc.php, на вход которого подаётся ID пользователя, вызывающего этот скрипт.
Необходимо выполнить условие: в каждый момент времени допустимо выполнение только _одного_ скрипта abc.php
_для пользователя с данным ID_.
Делал блокировку вручную через своё поле в БД MySQL. Поле содержит значение unixtime запуска скрипта
(если значение поля=0 - скрипт отработал). При запуске скрипт проверяет разницу текущено unixtime и значения
unixtime, записанного в указаном поле. Далее скрипт выполняет холостой цикл пока разница меньшая
некоторого значения TIMEOUT (стоит 10 сек);
Вроде должно работать, ан нет. Бывают ситуации когда клиента просто прорывает (вероятнее всего скапливаются
запросы на каком-то гейте).
Вопросы 1) Возможно ли такое, что MySQL как-то буферизирует SQL-запросы ? Если да - как отключить или сделать flush ?
2) Какие ещё варианты решения есть ?
 

gfd

Guest
а сколько скрипт выполняеться (минимальное время, максимальное время) приблизительно?
 

Green

Новичок
1- А пользователь может выполнять несколько разных скриптов одновременно?
Если нет то можно добавить в таблицу юзеров(предполагаю что она есть) поле "выполняемый скрипт" и туда прописывать выполняемый в данный момент скрипт.
2- Если нет, но количество скриптов ограничено, можно создать несколько полей в таблице юзеров под каждый скрипт
3-если количество скриптов неограничено- поможет таблица скриптов, которая связана с таблицей юзеров через 3 таблицу
Или я вопрос не понял?
 

Nimous

Guest
А как насчёт создавать файл с именем $user_id в начале скрипта,
а в конце работы-стирать? А в самом-самом начале скрипта проверять, создан ли он? Если ДА-нельзя, если НЕТ-можно::
<? if(!file_exists($user_id)){fopen($user_id,'a');echo ("Вэлком");}
else exit("Неможно!");
?>

Или может я что-то не понял...
 

Стас

Троечник
barracuda477
Мне кажется, что я задачу не понял. Для чего нужно запускать одну копию скрипта?
И напоследок. Я бы попробовал делать через сессии.
 

barracuda477

Guest
gfd
выпрлняется не более 1-2 сек

Green
Существует только один скрипт. Других скриптов нет :)

Nimous
Попробую через GET_LOCK() и RELEASE_LOCK() мускулевские.
Если не получится - буду файликами...

Стас
Ну вот нужно одну копию и всё. :)
Если я правильно помню - броузер должен поддерживать сессии. У а меня гарантии нет что он их поддерживает...
 

agx

Программер :-)
barracuda477
Сессии броузер не поддерживает и поддерживать не может!
Читай сылку, что тебе дал gfd.
 
Сверху