Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Прерывание текущего выполнение скрипта с паузой

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
GeeMTee
Отправлено: 17 Января, 2011 - 00:28:48
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Янв. 2011  
Откуда: Беларусь, Минск


Помог: 0 раз(а)




Пользователь переходит на страничку, которая посылает запрос на сервер к следующему скрипту:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $cnt = 0 ;
  3. while ($cnt < 10) {
  4.   echo date('H:i:s') ;
  5.   $cnt++ ;
  6.   sleep(2) ;
  7. }
  8. ?>


Само собой выполнение скрипта прервется через ~20 секунд.
Но если в этой время в браузере перейти на другую страницу, она просто будет ждать окончания выполнение текущего скрипта на сервере, и только после этого обработает новый запрос.
Задача состоит в том, чтобы как-то прервать выполняемый скрипт.

На данный момент очевидно, что новый запрос будет обработан через как минимум 20 секунд, а это не есть хорошо. Если перейти в другой браузер, то ПХП спокойной обработает следующий запрос.

Спасибо

(Отредактировано автором: 17 Января, 2011 - 00:35:08)



-----
<?php echo 'Hello, World' ; ?>
 
 Top
OrmaJever Модератор
Отправлено: 17 Января, 2011 - 01:08:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




использовать ajax


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
GeeMTee
Отправлено: 17 Января, 2011 - 09:27:40
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Янв. 2011  
Откуда: Беларусь, Минск


Помог: 0 раз(а)




OrmaJever, что значит использовать ajax?

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


-----
<?php echo 'Hello, World' ; ?>
 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Января, 2011 - 09:44:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




GeeMTee пишет:
я не могу послать новый

Cказки рассказываете. Хоть тыщу новых запросов можно отправить на сервер... И каждый новый запрос, читай процесс (даже с одного ip и браузера) будет запускаться в своем индивидуальном окружении. Иначе как по вашему пользователи в очередь чтоли встают на выполнение запросов??? Нет!!! Происходит ветвление процессов.
(Добавление)
И если клиент уйдет не дождавшись, процесс завершится сам.
 
 Top
GeeMTee
Отправлено: 17 Января, 2011 - 10:04:07
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Янв. 2011  
Откуда: Беларусь, Минск


Помог: 0 раз(а)




DeepVarvar пишет:
Cказки рассказываете. Хоть тыщу новых запросов можно отправить на сервер... И каждый новый запрос, читай процесс (даже с одного ip и браузера) будет запускаться в своем индивидуальном окружении.


А может быть Вы всё-таки попробуете реализовать мой пример, а не будете так говорить.
Если на сервере выполняется цикл (как в моем примере, например), то пока он не выполнится, новый запрос не будет обработан.

Возможно, есть какой-то параметр в настройках, который влияет на это.


-----
<?php echo 'Hello, World' ; ?>
 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Января, 2011 - 10:08:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




GeeMTee пишет:
Если на сервере выполняется цикл (как в моем примере, например), то пока он не выполнится, новый запрос не будет обработан.

Вы не правы. Щас нарисуем примерчик ))))))
(Добавление)
PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_GET['t']) AND $_GET['t'] == 'next') {
  3.         echo 'This is next page!!!';
  4.         }
  5. else {
  6.         $i = 0;
  7.         while ($i < 10) {
  8.                 echo $i.'<br />';
  9.                 sleep(2);
  10.                 $i++;
  11.                 }
  12.         }
  13.  


Пишем http://95[dot]84[dot]251[dot]194/test.php - ждем конец выполнения
Пишем http://95[dot]84[dot]251[dot]194/test.php?t=next - тут же получаем страницу
Все в одном окне...
(Добавление)
Можно потестить во вкладках окнах и в разных браузерах...
 
 Top
Мелкий Супермодератор
Отправлено: 17 Января, 2011 - 10:25:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




GeeMTee пишет:
Если перейти в другой браузер, то ПХП спокойной обработает следующий запрос.

И при чём тут тогда PHP и сервер? Ройте в строну своего браузера, почему он не считает нужным отсылать запрос.

(Отредактировано автором: 17 Января, 2011 - 10:28:49)



-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 17 Января, 2011 - 15:15:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




GeeMTee пишет:
Задача состоит в том, чтобы как-то прервать выполняемый скрипт.
Для осуществления создания предполагаемой схемы работы web-приложения в действительности целесообразно использование технологий интерактивного взаимодействия с сервером таких как Iframe/AJAX - однако явное решения предполагаеой формы задачи также существует В частности запуск очередной инстанции CGI-приложений осуществляется на основе применения правил alias-инга и действенного перенаправления - которые могут быть сохранены в соответствующих условнвц блок конфигурационного файла с обеспечением занесения текущего PID процесса в специальную БД


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
GeeMTee
Отправлено: 17 Января, 2011 - 15:38:52
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Янв. 2011  
Откуда: Беларусь, Минск


Помог: 0 раз(а)




Мелкий пишет:
И при чём тут тогда PHP и сервер? Ройте в строну своего браузера, почему он не считает нужным отсылать запрос.

Странно.
Во всяком случае это не зависит от браузера.
Пробовал на разных браузерах.
Пробовал на разных хостингах.
На локальной машине у меня на Denwer не работает. На одном хостинге тоже не работало, а на другом работает.

Вот у меня поэтому и появилась мысль о том, что может быть разные настройки у этих серверов.
(Добавление)
Ещё, кстати, заметил на примере DeepVarvar, что если открыть в разных вкладках браузера первую ссылку в разное время (например через 5 секунд), то ответ в обе вкладки приходит почему-то в одно и то же время (= Ха-ха


-----
<?php echo 'Hello, World' ; ?>
 
 Top
JustUserR
Отправлено: 17 Января, 2011 - 16:06:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




GeeMTee пишет:
То ответ в обе вкладки приходит почему-то в одно и то же время
Возможной причиной осуществления получения синхронного ответа для предполагаемых запросов в целевому web-серверу - является использование браузером единого keep-alive соединения и обеспечения буферизации при формировании пакетов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
GeeMTee
Отправлено: 17 Января, 2011 - 16:22:37
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Янв. 2011  
Откуда: Беларусь, Минск


Помог: 0 раз(а)




Буферизация тут скорее всего непричем.
Можно провести простой эксперимент.
Один запрос выполняется 20 секунд.
- запускаем запрос скрипт http://95[dot]84[dot]251[dot]194/test.php
- через секунд 15 запускаем повторно в другой вкладке
ответ приходит через 5 секунд, то есть это наш первый запрос.

если бы это была буферизация, то ответ приходил бы хотябы через 20 сек после запуска скрипта во второй вкладке.

так что это, если я правильно конечно понимаю, это скорее всего единое соединение, про которое JustUserR так же сказал.
(Добавление)
Это если на Opera.
Но так не происходит в FireFox, например.

Так что много чего и от браузера зависит.
Жаль, конечно, что такая разносторонность проявляется


-----
<?php echo 'Hello, World' ; ?>
 
 Top
DeepVarvar Супермодератор
Отправлено: 17 Января, 2011 - 16:29:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




GeeMTee если сервер видит что один и тот же запрос идет повторно с того же адреса (сокет занят) - то и не будет ветвить процесс. Это браузер рисует в обоих вкладках кеш из первой (у него тоже сокет занят)
 
 Top
OrmaJever Модератор
Отправлено: 17 Января, 2011 - 16:38:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




GeeMTee пишет:
Во всяком случае это не зависит от браузера.

Браузер отправил запрос и ждёт ответа. Если он будет отсылать запросы не дожидаясь ответа то это ддос получится. Может ещё по другим причинам браузеры так написаны.
В тоге нужно использовать ajax.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
GeeMTee
Отправлено: 17 Января, 2011 - 17:11:58
Post Id



Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Янв. 2011  
Откуда: Беларусь, Минск


Помог: 0 раз(а)




OrmaJever пишет:
В тоге нужно использовать ajax.

У меня запрос к скрипту с паузой и делается через ajax.


-----
<?php echo 'Hello, World' ; ?>
 
 Top
Maksim337
Отправлено: 17 Января, 2011 - 18:23:39
Post Id


Частый гость


Покинул форум
Сообщений всего: 255
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Читал начало темы. Автору скажу, что бывает такое, и причина не в пхп и сервере. Просто к примеру у меня опера так странно ведет себя, если гдето долго выполняеться запрос, то как бы подвисает вкладка(не опера а сама вкладка с адресом). Хз как обьяснить это, надо только показать...
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB