Обновление данных на фронте во время выполнения php скрипта, возможно?
Добрый день.
Допустим я написал скрипт который парсит данные с сайта.
Запускать я его буду с фронта, ajax запросом, заодно и настройки отправлю.
Вот я и задался вопросом, можно ли сделать так что бы скрипт во время парсинга отдавал мне данные, к примеру возвращал на фронт что спарсен товар, и так после каждого товара и т.д. (аля чат на websocket)
Такой интерактив ведет к серьезному оверхеду. Его не стоит заводить без действительной необходимости.
Вы, конечно, можете сделать систему: AJAX-запрос, сервер парсит очередной товар, отвечает, повторить цикл - но это будет работать на порядок медленнее, потребует сохранять состояние между запросами, да и просто породит кучу ненужного трафика.
Сергей Сергей, нет. Просто echo в скрипте дойдет до фронта только по окончании работы всего скрипта.
Для интерактива понадобятся пляски либо с сокетами, либо с long polling - а это все тот самый оверхед, о котором я и говорил.
Adamos, А если использовать костыли аля после каждой итерации через curl отсылать данные через GET на другой php, который уже пишет в промежуточный файл инфу. А на фронте я уже обращаюсь ко второму php файлу который так же и отдаёт мне инфу.
Это слишком идиотски и растратно?
зы - делаю чисто для себя, just4fun так сказать, поучиться узнать что-то новое, можно ли, и как лучше.
зыы - вот благо Вашему комменту узнал про long polling :)
Кирилл Шрейдер, это все будет работать, пока вы балуетесь для себя. Когда эти лишние движения умножаются на количество пользователей - происходят нехорошие вещи вроде полной недоступности сервера.
Про long polling я тоже узнал только из подобных обсуждений, сам его никогда не использовал - и пока нужды не вижу. Тем более, что постоянно придумывают новые способы извратиться и добиться-таки интерактива там, где его по элементарной клиент-серверной логике нет и быть не должно.
Adamos, сокеты и лонгполлинг нужны при разделении скрипта в физическом плане на всякие диспетчеры, хранилища и парсеры. Мое эхо предназначено для скрипта перебором всего сайта несколькими вложенными и не очень циклами. И да, эхо с немедленным сбросом буфера. А для красоты, как мне кажется основной составляющей в данной задаче, можно задержки вставлять.
Сергей Сергей, мне это представляется именно попыткой впихнуть невпихуемое.
Или делать грамотную архитектуру - то есть парсить сайт порциями и отчитываться о каждой - либо не заниматься ерундой вовсе. Мужественно преодолевая ограничения на время выполнения, количество открытых потоков и прочее, ведущее в серьезной работе все к тому же исчерпанию ресурсов и DDoS типа "сделал сам".
Adamos, именно так. Но ограничения можно через внутрискриптовую конфигурацию раздвинуть, пусть не все. А грамотная архитектура пока преждевременна, ибо как понять нужду не преодолевая?
В прямом смысле нет. Но можно
1) через тот же websocket (php скрипт в виде демона)
2) используя 2 скрипта: парсер и опрос состояния, парсер пишет в файл количество обработаных элементов, второй скрипт аяксом возвращает это
3) парсить частями, запрос /parse.php?from_id=1000 после ответа новый запрос