Веб-узел найден. Ожидается ответ...

Роберт

Аналитик
Веб-узел найден. Ожидается ответ...

В виде вступления: Пару дней назад анонсировали выход IE8. Значит самое время переходить с IE6 на IE7 (поскольку наверняка уже стабильная).
Теперь о проблеме: Есть небольшая програмка написанная на PHP , задача которой обойти несколько тысяч устройств и сохранить информацию о них в базе , попутно отображая происходящий процесс на экране браузера. Тоесть в общем-то после обработки каждого устройства на экране появляется строка:
Устройство № AR 0211 (считано: 12 , дублей: 2 , ошибок: 0)
Весь процесс обхода занимает около часа. Всё это время на экран одна за другой появляются эти строки.
На IE6 всё было нормально - запустил , и она отработала.
А вот с IE7 какая-то непонятность. Всё нормально работает где-то 30-40 минут. В течении всего этого времени строчки появляются , а в левой нжней части IE7 (в строке состояния) написано:
Ожидание http://127.0.0.1/Baza/Obraz.php...
И вдруг где-то через 30-40 минут , когда сделано уже 60-80% , в строке состояния вдруг появляются чёрные часики с надписью:
Веб-узел найден. Ожидается ответ...
которая через секунд десять сменяется на надпись:
Готово
всё с теми же самыми чёрными часиками
И ещё спустя 10 секунд сменяется на надпись:
Начало загрузки с узла: http://127.0.0.1/Baza/Obraz.php
и вся работа начинается с начала будто в IE7 нажали на клавишу "Обновить (F5)" - через секунду по чистому листу эксплорера сново поползли строки.

Причём происходит это не всегда. Пару раз в день всё пройдёт нормально , а потом пару раз вот такая штука с загадочными чёрными часиками.
Может кто-то сталкивался? В чём причина? Может какие-то настройки в IE7 надо поменять? (он свеженький , ещё ничего в нём не менялось) Может в первых строках HTML'a надо что-нибудь прописывать , или в шапке документа он какую-нибудь информацию ожидает?

Вот как выглядит в картинках:
 

weregod

unserializer
1) не менялись ли настройки апача (если у Вас апач)?
2) с каким периодом выплёвывается каждая следующая строка? может, на одном из устройств время превысило критическую паузу для браузера/веб-сервера
3) какой код выплёвывается в браузер для отображения каждой строки?
 

Роберт

Аналитик
1) нет , ничего не менялось (именно Apache)

2) новые строки вы водятся с интервалом 1-5 секунды , не больше...
сам видел что никакой задержки перед "чёрными часиками" небыло - Сижу в програмке MySQL-Front рефрешу таблицу каждую секунду , смотрю какие данные поступают. Вдруг вижу - номера устройств опять с единины пошли по порядку считаться. Переключаюсь на броузер - а там как будто кто-то refresh нажал. И потом несколько раз специально сидел в браузере и ждал - произойдёт или нет? Задержек небыло! Вдруг ни с того не с сего говорит что: Веб-узел найден. Ожидается ответ...

3)
PHP:
echo "Устройство № AR $Nomer (считано: $Kol , дублей: $Dubli , ошибок: $Er)<br>"
 

DiMA

php.spb.ru
Команда форума
у меня все описанные симптомы, зависящие от погоды (под сервер виндовс 2000)

бороться так:

1. скрипт блокируем от параллельного запуска (ибо уёб....й IE реально разрывает коннект и перезапрашивают страницу)

2. перезапускать Апач для лечения глюков по ночам

3. скриптами убивать процесс Апача, имеющего ровно 3 потока, туда "складируются" зависшие пхп скрипты. ПХП так же уёб..но зависает и блокировка от параллельного запуска может висеть вечно. Постоянно рестартовать Апач опасно и долго. Убивать третий левый процесс Апача с 3 потоками - безопасно.
 

cDLEON

Онанист РНРСlub
Такие программы нужно запускать не в браузере, а в консоли. :(
 

Роберт

Аналитик
DiMA
Очень похоже на первый пункт. Так как пока заметил что "чёрные часики" появляются только в том случае если перед этим этот скрипт был запущен , а потом остановлен кнопкой "Остановить (Esc)" , после чего заново запущен через "Обновить (F5)"!!!
Но после кнопки "Остановить" скрипт точно прекращает работу , так как загруска процесса httpd сразу становится - 0%
Хоть это и не паралельный запуск , но как-то IE7 говорит веб-серверу что надо прекращать работу , так как если нажать на кнопку Stop в IE6 , то Apache не прекращает работу сразу , а ещё секунд 30 продолжает выполнять скрипт (это видно и по загрузке процессора и по поступлению данных в MySQL). Хотя я считал что если нажать Stop - то происходит просто разсоединение установленного TPC соединения.
 

weregod

unserializer
Роберт, обратите внимание на совет
cDLEON, если есть возможность - сто пудов лучше в консоли пускать
 

Роберт

Аналитик
cDLEON и weregod
Конечно-конечно , когда есть возможность работать только на локальной машине... Но далеко не каждый день будешь ехать в офис чтобы запустить сборщик.

Но вопрос не в том откуда запускать и каким браузером пользоваться. Вопрос в том - почему IE разрывает соединение и перезапрашивают страницу? Может у него есть какой-то таймаут или соотношение (мол если средняя скорость за последних пол часа меньше 10 байт в секунду - то перегружать) , и если вставить в шапку отпавляемого файла какую-то команду , то он не будет проверять это...
Почему вдруг появляется статус - "Веб-узел найден"?
До этого никогда не видел чёрных часиков...
 

DiMA

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

TutanXamoN

Новичок
Роберт
Не сочтите за грубость, но вы что-нибудь слышали про утилиты удалённого администрирования?
 

Роберт

Аналитик
TutanXamoN
Я так понимаю что в вашей компании каждый сотрудник имеет доступ к серверу из дома скажем через RAdmin? Ну может у вас так подходят к безопасности...
А вообще , когда спрашивают - "Как починить мотор если он греется после 100км езды?" , то ответы типа - "А вы что-нибудь про метро или автобусы слышали?" - можно "сочтесть" за грубость.

DiMA
Я думаю что тут ни как не зависание РНР , потому что на IE6 такого небыло ни разу (больше года блок работает без изменений) , а с IE7 грубо говоря 50 на 50!
Хорошо , я верю что РНР может зависнуть и не освободить ресурсы. Но тогда почему браузер перезапрашивает страницу? Ну разве где-то до этого встречалось , чтобы в случае разрыва соединения браузер (который уже загрузил несколько мегабайтов страницы) стал бы её перезапрашивать (посылать вовторный запрос на эту страницу?
К тому же еслибы файлы остались бы блокированными - то это привело бы именно к тому что я не получил бы информацию после перезапроса.

Так что пока самый большой вопрос - причина появления чёрных часиков и статуса "Веб-узел найден" (ведь тотже IE6 его никогда не терял).
http://r77.at.tut.by/Perezagruzka.PNG
 

DiMA

php.spb.ru
Команда форума
> Но тогда почему браузер перезапрашивает страницу?

Хз, но наверно потому, что сервер оборвал соединение, а не закрыл по-человечески

покажи скрипт
 

Grezz

Новичок
Автор оригинала: Роберт
А вообще , когда спрашивают - "Как починить мотор если он греется после 100км езды?" , то ответы типа - "А вы что-нибудь про метро или автобусы слышали?" - можно "сочтесть" за грубость.
Абсолютно с вами согласен, но только в том случае если речь идёт не о моторе от дрели...


По теме - а вы не рассматривали такой вариант работы:
1. пользователь запрашивает в браузере "стартующий" скрипт
2. "стартующий" скрипт запускает в фоновом режиме скрипт "сбора данных" и перенаправляет его поток вывода в файл, а затем редиректит пользователя на этот файл
3. вариант a
браузер пользователя открывает файл - лог и периодически его обновляет
вариант б
браузер пользователя открывает скрипт выдающий информацию по файлу - логу (страница обновляется раз в n минут)

При такой схеме процесс запускать можно хоть с мобильного телефона
 

Роберт

Аналитик
Grezz
Честно скажу - Нет , не рассматривал. Потому что никогда до этого , для этой задачи , небыло такой необходимости (IE6 никогда не давал сбоев и не пытался сделать перезапрос медленно подгружаемой страницы). В браузере запустил - и всё выполнилось и показало отчёты.
Другое дело что если , как сказал DiMA , это зависает РНР , то и в вашем случае фоновый скрипт зависнет.
Но проблема не в РНР , а в IE7.
Как я уже говорил ранее:
пока самый большой вопрос - причина появления чёрных часиков и статуса "Веб-узел найден"
Что они означают и почему появляются в процессе загрузки страницы?

DiMA
> наверно потому, что сервер оборвал соединение, а не закрыл по-человечески
Если бы действительно можно было бы оборвать соединение так чтобы потом самый популярный браузер в мире сделал бы перезапрос страницы - наверно это бы уже много где использовалось бы (для тех же накруток посещаемости).
И ещё раз повторю - в IE6 такого никогда небыло!
В любом случае - код скрипта я вам выслал (хоть и сомневаюсь что вы найдёте что-нибудь приводящее к обрыву , ибо там простой вывод).
 

antson

Новичок
Партнер клуба
Роберт
ошибки проектирования всегда проявляются неожиданно
и с фразы, млин до этого же все работало.

вместо фиксированого длинного цикла лучше разбить
его на маленькие шажки с протоколированием
в логе (на случай необходимости обзора информации)

как будет вызываться шажок и сохраняться между вызовами номер итерации, тут полный простор для фантазии
Простейшее meta reload step+1 или переодических
вызовов по крону скрипта (для которого номер итерации храниться в субд)
 

DiMA

php.spb.ru
Команда форума
> meta reload step+1

Нихрена не решение. Юзер сможет прервать операцию на середине и повторишь Nый шаг несколько раз. Думаешь, никто до этого не допер для 20-минутных скриптов?
 

Роберт

Аналитик
antson
> ошибки проектирования всегда проявляются неожиданно
Это об ошибках которые появляются на ровном месте в больших программах где поменялись какие-то данные...
А здесь только браузер поменялся. На какую часть "ошибок проектирования" это может повлиять?
 

DiMA

php.spb.ru
Команда форума
Роберт, адрес компа предыдущего оратора - nikitaf.office.intechnic.lv

АнтиРоберт, ну и кто теперь балбес? =)))
 

vovanium

Новичок
Роберт
ИМХО, лучше это дело сделать через AJAX, тогда не будет никаких проблем с таймаутами броузера.
Т.е. делаешь так:
1. твой скрипт запускается броузером, отдает страницу и закрывает соединение, продолжая выполнение.
2. рабочий скрипт пишет в лог файл, все события
3. броузер по ajax запрашивает инфу у скрипта информера, который читает лог-файл, и отдает нужную инфу броузеру.

Вот в принципе и всё.

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