Доброго времени суток. Ситуация следующая. Есть файл index.php в котором находится iframe с загруженным в него test.php. в test.php выполняется примерно следующее: Код (Text): ob_start(); require('config.php'); // подключение к БД и выборка значений while( $row = mysql_fetch_object($sql) ) { // выполняем действие с $row echo 'результат работы с $row'; ob_flush(); flush(); sleep(5); // необходимо } ob_end_flush(); в процессе работы из файла index.php идет ajax запрос каждые N секунд. и каждый из этих отправленных запросов подвисает до тех пор пока не отработает до конца test.php. Т.е. как только в test.php закончился while все запросы получают по респонсу и выводят результат, только первый ждет допустим 30секунд, второй 25..... и так далее, при обычном времени ожидания 8мсек. как заставить скрипт дать ответ запросу ajax при работающем в фоне test.php? протестировано на win 32 и debian. на обоих apache 2.2 и php 5.2.8 заранее спасибо.
начиная от желания воткнуть sleep (все решается не так, но сначала надо расписать на русском что надо) желание есть убрать сумрак в голове и разобраться как писать по людски? или будем наезды искать?
не ожидал просто, что сразу будут пытаться учить. если это так необходимо (хотя на мой взгяд задача стоит точно) опишу словами: в БД хранится некоторая информация, ее надо оттуда извлекать и отправлять на сторонний сервер для проверки. в целях снижения нагрузки на сервер и ставится sleep(N), ибо данных может быть очень много (1K+) да и к серверу не только я запросы отправляю. от сервера необходимо получить ответ проверки и записать его обратно в БД. на интерфейс необходимо вывести следующую информацию: общее количество информации в БД, количество уже проверенной информации (в режиме реального времени в момент проверки - для этого используется ajax) и внутреннее имя информации в момент ее обработки в виде обычного текста. интерфейс должен быть под защитой http_auth с сессиями. результат: index.php отображает статистику и содержит в себе iframe, где по нажатию submit-кнопки запускается test.php который в себе содержит код, представленный в посте 1. также в index.php выводится javascript реализующий post ajax-запрос самому себе (т.е. к index.php) с параметром getstats=1, далее этот getstats ловится, делается запрос к бд с последующим echo json_encode($stats_result); exit(); и вот теперь у меня вопросы: что тут реализовано "не по людски" и так ли было необходимо все это писать?
так ты готов разбираться что не так и как по уму? ??? как это снижает нагрузку? это много? в чем смысл "реального времени"? тебе надо обеспечить целостность информации и что еще? не путай задачу и реализацию. веб технологии (да и вообще любое вменяемое действие) работают по принципу "запрос-ответ", а не остановка открытого соединения и ожидание непонятно чего. асинхронность в виде аякса - это запрос и продолжение работы без ожидания ответа. использовать sleep по непонятным причинам не надо, хотя бы потому, что описанного желаемого результата ты не достигнешь. ты должен отдавать данные и закрывать соединение. зачем тебе надо разбивать обработку - покрыто мраком, я подозреваю что все можно уместить в полсекунды. даже если нет, это решается отдачей части данных и пометки их как обработанные. давай все таки начнем с задачи, чтобы ты сам понимал что зачем делается. Это окупится, не только для этого случая.
на сервере при поступлении информации начинают запускаться огромные запросы к собственной БД. Какого рода эти запросы - я хз, к северу ни доступа, ни отношения не имею. ну... а что считать много? для каждого свое понятие под реальным временем я подразумеваю вывод на экран количества уже проверенной информации в момент проведения проверки. т.е в данный момент проверено 20 единиц из 100. в момент следующего запроса количество проверенного может как и увеличится так и нет, в зависимости от работающего в ифрейме скрипта проверки а как по-твоему достичь снижения нагрузки на сторонний сервер? по поводу задачи - она описана в моем предыдущем посте.