1. freelsd - 14 Октября, 2015 - 18:15:46 - перейти к сообщению
У меня есть некий ресурсоемкий процес. Хотелсь бы выводить в браузер его состояние, как на консоли примерно. То есть показал что какой-то процент обработался, стер эту запись, потом показал новый процентаж. Я надеюсь, что ясно выразился. Я так понял что нужно ob_clean() и flush() использовать? Или как лучше этого достичь?
2. Мелкий - 14 Октября, 2015 - 19:58:21 - перейти к сообщению
Ресурсоёмкий процесс запускаете только в консоли. Если надо его запускать из веба - exec в помощь. Или, как более взрослое и контролируемое решение - сервер очередей.
Этот процесс время от времени пишет в какое-то хранилище отчёт о своём выполнении.
Веб-морда тем временем периодически опрашивает сервер, читает это состояние скрипта и рисует красивый прогресс-бар. Можно каким-нибудь веб-сокетом, если есть желание.
Этот процесс время от времени пишет в какое-то хранилище отчёт о своём выполнении.
Веб-морда тем временем периодически опрашивает сервер, читает это состояние скрипта и рисует красивый прогресс-бар. Можно каким-нибудь веб-сокетом, если есть желание.
3. freelsd - 14 Октября, 2015 - 20:38:40 - перейти к сообщению
Мелкий пишет:
Ресурсоёмкий процесс запускаете только в консоли. Если надо его запускать из веба - exec в помощь. Или, как более взрослое и контролируемое решение - сервер очередей.
Этот процесс время от времени пишет в какое-то хранилище отчёт о своём выполнении.
Веб-морда тем временем периодически опрашивает сервер, читает это состояние скрипта и рисует красивый прогресс-бар. Можно каким-нибудь веб-сокетом, если есть желание.
Этот процесс время от времени пишет в какое-то хранилище отчёт о своём выполнении.
Веб-морда тем временем периодически опрашивает сервер, читает это состояние скрипта и рисует красивый прогресс-бар. Можно каким-нибудь веб-сокетом, если есть желание.
А если без красивого прогресс бара, текстом просто выводить в цикле какую-то информацию. Просто хотелось бы чтобы вывод не шел браузер каждый раз новой строкой, а чтобы все было одной записью.
Вот на как на рисунке второй вариант. Так понятнее будет. Мне нагрузка на апач не суть важна, можно и из веба запускать.
4. Мелкий - 14 Октября, 2015 - 20:43:20 - перейти к сообщению
Алгоритм тот же.
Вместо красивого прогресс-бара можно делать всё что угодно.
Вместо красивого прогресс-бара можно делать всё что угодно.
5. freelsd - 14 Октября, 2015 - 20:44:41 - перейти к сообщению
Мелкий пишет:
Алгоритм тот же.
Вместо красивого прогресс-бара можно делать всё что угодно.
Вместо красивого прогресс-бара можно делать всё что угодно.
Так я и спрашиваю, как собственно реализовать такой вывод? Чтобы статус не новой строкой дописывался а одной.
6. Мелкий - 14 Октября, 2015 - 21:33:48 - перейти к сообщению
Вы мне предлагаете процитировать собственное сообщение?
Как это будет выглядеть на морде зависит только того, что вы сделаете вместо этапа "рисует красивый прогресс-бар"
Как это будет выглядеть на морде зависит только того, что вы сделаете вместо этапа "рисует красивый прогресс-бар"
7. freelsd - 14 Октября, 2015 - 21:36:27 - перейти к сообщению
Мелкий пишет:
Вы мне предлагаете процитировать собственное сообщение?
Как это будет выглядеть на морде зависит только того, что вы сделаете вместо этапа "рисует красивый прогресс-бар"
Как это будет выглядеть на морде зависит только того, что вы сделаете вместо этапа "рисует красивый прогресс-бар"
Лол, ну так я конкретно и спрашиваю как мне это сделать вместо этапа "рисует красивый прогресс-бар" =)
8. DelphinPRO - 14 Октября, 2015 - 23:18:55 - перейти к сообщению
Аяксом раз Х секунд делаете запрос на сервер, который читает отчет их базы, который туда пишет ресурсоемкий процесс. Запрос возвращает процент состояния, вы выводите на страницу это процент.
Как выводить на страницу?
Как выводить на страницу?
CODE (javascript):
скопировать код в буфер обмена
скопировать код в буфер обмена
- document.getElementById('percent').innerHTML(percent)
Как сделать аякс-запрос?
CODE (javascript):
скопировать код в буфер обмена
скопировать код в буфер обмена
- var r = new XMLHttpRequest();
- r.open("POST", "path/to/api", true);
- r.onreadystatechange = function () {
- if (r.readyState != 4 || r.status != 200) return;
- document.getElementById('percent').innerHTML(responce);
- };
- r.send();
Что еще разжевать?