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
Форумы портала PHP.SU :: Версия для печати :: Прерывание текущего выполнение скрипта с паузой
Форумы портала PHP.SU » PHP » Программирование на PHP » Прерывание текущего выполнение скрипта с паузой

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

1. GeeMTee - 17 Января, 2011 - 00:28:48 - перейти к сообщению
Пользователь переходит на страничку, которая посылает запрос на сервер к следующему скрипту:

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 секунд, а это не есть хорошо. Если перейти в другой браузер, то ПХП спокойной обработает следующий запрос.

Спасибо
2. OrmaJever - 17 Января, 2011 - 01:08:36 - перейти к сообщению
использовать ajax
3. GeeMTee - 17 Января, 2011 - 09:27:40 - перейти к сообщению
OrmaJever, что значит использовать ajax?

Без разницы, в каком виде я посылаю запрос. Если он не полностью отработал, я не могу послать новый. Точнее я посылаю серверу, но он не отрабатывает, пока текущий не закончится.
4. DeepVarvar - 17 Января, 2011 - 09:44:26 - перейти к сообщению
GeeMTee пишет:
я не могу послать новый

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


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

Возможно, есть какой-то параметр в настройках, который влияет на это.
6. DeepVarvar - 17 Января, 2011 - 10:08:24 - перейти к сообщению
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 - тут же получаем страницу
Все в одном окне...
(Добавление)
Можно потестить во вкладках окнах и в разных браузерах...
7. Мелкий - 17 Января, 2011 - 10:25:23 - перейти к сообщению
GeeMTee пишет:
Если перейти в другой браузер, то ПХП спокойной обработает следующий запрос.

И при чём тут тогда PHP и сервер? Ройте в строну своего браузера, почему он не считает нужным отсылать запрос.
8. JustUserR - 17 Января, 2011 - 15:15:09 - перейти к сообщению
GeeMTee пишет:
Задача состоит в том, чтобы как-то прервать выполняемый скрипт.
Для осуществления создания предполагаемой схемы работы web-приложения в действительности целесообразно использование технологий интерактивного взаимодействия с сервером таких как Iframe/AJAX - однако явное решения предполагаеой формы задачи также существует В частности запуск очередной инстанции CGI-приложений осуществляется на основе применения правил alias-инга и действенного перенаправления - которые могут быть сохранены в соответствующих условнвц блок конфигурационного файла с обеспечением занесения текущего PID процесса в специальную БД
9. GeeMTee - 17 Января, 2011 - 15:38:52 - перейти к сообщению
Мелкий пишет:
И при чём тут тогда PHP и сервер? Ройте в строну своего браузера, почему он не считает нужным отсылать запрос.

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

Вот у меня поэтому и появилась мысль о том, что может быть разные настройки у этих серверов.
(Добавление)
Ещё, кстати, заметил на примере DeepVarvar, что если открыть в разных вкладках браузера первую ссылку в разное время (например через 5 секунд), то ответ в обе вкладки приходит почему-то в одно и то же время (= Ха-ха
10. JustUserR - 17 Января, 2011 - 16:06:52 - перейти к сообщению
GeeMTee пишет:
То ответ в обе вкладки приходит почему-то в одно и то же время
Возможной причиной осуществления получения синхронного ответа для предполагаемых запросов в целевому web-серверу - является использование браузером единого keep-alive соединения и обеспечения буферизации при формировании пакетов
11. GeeMTee - 17 Января, 2011 - 16:22:37 - перейти к сообщению
Буферизация тут скорее всего непричем.
Можно провести простой эксперимент.
Один запрос выполняется 20 секунд.
- запускаем запрос скрипт http://95[dot]84[dot]251[dot]194/test.php
- через секунд 15 запускаем повторно в другой вкладке
ответ приходит через 5 секунд, то есть это наш первый запрос.

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

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

Так что много чего и от браузера зависит.
Жаль, конечно, что такая разносторонность проявляется
12. DeepVarvar - 17 Января, 2011 - 16:29:35 - перейти к сообщению
GeeMTee если сервер видит что один и тот же запрос идет повторно с того же адреса (сокет занят) - то и не будет ветвить процесс. Это браузер рисует в обоих вкладках кеш из первой (у него тоже сокет занят)
13. OrmaJever - 17 Января, 2011 - 16:38:48 - перейти к сообщению
GeeMTee пишет:
Во всяком случае это не зависит от браузера.

Браузер отправил запрос и ждёт ответа. Если он будет отсылать запросы не дожидаясь ответа то это ддос получится. Может ещё по другим причинам браузеры так написаны.
В тоге нужно использовать ajax.
14. GeeMTee - 17 Января, 2011 - 17:11:58 - перейти к сообщению
OrmaJever пишет:
В тоге нужно использовать ajax.

У меня запрос к скрипту с паузой и делается через ajax.
15. Maksim337 - 17 Января, 2011 - 18:23:39 - перейти к сообщению
Читал начало темы. Автору скажу, что бывает такое, и причина не в пхп и сервере. Просто к примеру у меня опера так странно ведет себя, если гдето долго выполняеться запрос, то как бы подвисает вкладка(не опера а сама вкладка с адресом). Хз как обьяснить это, надо только показать...

 

Powered by ExBB FM 1.0 RC1