Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ограничить колво выполнений скрипта, одним юзером за опр время
 
 автор: Zombi   (13.11.2010 в 13:32)   письмо автору
 
 

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

например если юзер за 10 сек по 20 раз нажимает обновить в браузере или 20 раз меняет значения какихто параметров на странице и посылает запрос то на сервере обрабатывается 20 его запросов, мне надо ограничить чтобы обрабатывался только последний запрос, к примеру за последние 5 секунд!...

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

если не лень/не жалко/не в лом может у кого уже есть какойнить толковый вариантец на такой случай?

  Ответить  
 
 автор: Trianon   (13.11.2010 в 13:35)   письмо автору
 
   для: Zombi   (13.11.2010 в 13:32)
 

куда проще обрубить не самый старый, а самый свежий экземпляр.
Поскольку оный будет текущим процессом, и сможет сам себя тихо удушить.
Может даже написать пред этим - "Перестаньте клацать "Обновить" ! Кнопка отвалится!"

  Ответить  
 
 автор: Zombi   (13.11.2010 в 14:26)   письмо автору
 
   для: Trianon   (13.11.2010 в 13:35)
 

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

смысл в том чтобы загружать страницу не более 1 раза в заданный промежуток времени и если после загурзки в этот промежуток были ещё запросы то выполнять надо тока последний запрос..
function load_wait($wait_time = 2000)
{//задаем время в мс. за которое можно загрузить эту страницу не более 1 раза
  $time_start = microtime(1);
  session_start();
  
  $var_counter   = 'load_count';
  $var_prev_load = 'prev_load_time';
  
  if (!isset($_SESSION[$var_counter]))
  {
    $_SESSION[$var_counter] = 1;
    $_SESSION[$var_prev_load] = microtime(1);
    return;
  }
  $_SESSION[$var_counter]++;
  
  $query_count = $_SESSION[$var_counter];

  
  if (!isset($_SESSION[$var_prev_load]))
  {//хз как, но такое тож случаецо
    $_SESSION[$var_prev_load] = microtime(1);
  }
  
  $prev_time = $_SESSION[$var_prev_load];
  
  $wait_need = $wait_time-round((microtime(1)-$prev_time)*1000,0);
  if($wait_need>0)
  {
    //echo "wait $wait_need ms ... <br>";
    usleep($wait_need);//usleep похоже невсегда срабатывает
    $wait_need = $wait_time-round((microtime(1)-$prev_time)*1000,0);
    if($wait_need>1000)
      sleep($wait_need/1000);
  }
  
  $log_file = "log/$var_counter.query_close";
  
  if($query_count<$_SESSION[$var_counter])
  {//если после ожидания были ещё попытки загрузить данные то эта попытка уже не ф щёт
    writeToFile($log_file,"ab","$var_counter == $query_count / ".$_SESSION[$var_counter]."\n");
    return 0;
  }
  writeToFile($log_file,"ab","test return 1\n");
  $_SESSION[$var_prev_load] = microtime(1);
  return 1;
}
//далее в начале страницы вставляем:
if(ajax_load_wait($id_query,5000)==0) exit(0);

но значение $_SESSION[$var_counter] обновляется не динамически а только 1 раз при старте скрипта, и получается в скрипте тока последнее значение переменной сесси...
и из него узнать что запущена этаже страница этимже пользователем невозможно..., ну покрайней мере я незнаю как это сделать )
может тут кто знает?

  Ответить  
 
 автор: Trianon   (13.11.2010 в 14:46)   письмо автору
 
   для: Zombi   (13.11.2010 в 14:26)
 

>но значение $_SESSION[$var_counter] обновляется не динамически а только 1 раз при старте скрипта, и получается в скрипте тока последнее значение переменной сесси...
>и из него узнать что запущена этаже страница этимже пользователем невозможно..., ну покрайней мере я незнаю как это сделать )
>может тут кто знает?

работайте с файлом напрямую.
работайте с БД.

  Ответить  
 
 автор: Zombi   (13.11.2010 в 15:15)   письмо автору
 
   для: Trianon   (13.11.2010 в 14:46)
 

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

  Ответить  
 
 автор: deimand   (13.11.2010 в 23:27)   письмо автору
 
   для: Zombi   (13.11.2010 в 15:15)
 

>както дико...

это пять баллов

  Ответить  
 
 автор: deimand   (13.11.2010 в 13:45)   письмо автору
 
   для: Zombi   (13.11.2010 в 13:32)
 

это жутко напрягает пользователей.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования