![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| studentigor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 397 Регистрация: 14.11.2008 Репутация: нет Всего: нет |
Всем привет.
Есть парсер. Он по имеющимся логину и паролю авторизируется на неком сайте, и с личного кабинета авторизированого пользователя парсит некие данные. Данных можнт быть мало, а может быть и много. Механиз такой. Аякс шлет запрос на сервер, он запускает парсер, он начинает работать. Сначала парсит и расфасовывает все по меделям, потом все скопом встявляет в базу, и в качастве ответа возвращает колличество спаршеных записей. Так вот, если записей немного, парсер отрабатывает и все нормально возвращается. Но если их оч много, то происходит следующее. Послался аякс запрос, парсер начал работать, через время он возвращает на аякс ответ "504 gateway time-out" - ошибка, нужное число спаршеных записей не получена, при этом сам парсер продолжает работать дальше, и в итоге дорабатывает до конца. Я на локале, в настройку аякса запихнул время ожидания ответа от сервера - 10 минут(чтобы наверняка). С таким раскладом все нормально отработало и в аякс я получил нужный мне ответ. Но вот на хостинге этот таймаут ожидания ответа игнорится, ну и само собой я постоянно полачай 504 ошибку. На хосте врятли мне позволят увеличить время ожидания ответа, т.к. это небезопасно. Подскажите как можно решить такую задачку |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 14 Всего: 137 |
Ну если выдумывать костыли - например парсить в кроне и заносить результат в мемкеш, а при аякс обращении выдавать закешированные данные. Хотя проще сменить тайм аут, а при отказе в этом, сменить хостинг.
|
|||
|
||||
| studentigor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 397 Регистрация: 14.11.2008 Репутация: нет Всего: нет |
Aliance, тат даже дело не в том что хост не разрешит это сделать, тут ещё огромную роль играет заказчик.
А он заморочен по поводу производительности, потому что они походу за нормальный хост не хотят платить лаве, а сидят на слабеньком, там ограничено по оперативе, по дисковому пространству, и тд. И врятли его интересует то что возникла такая загвоздка. По поводу парсинга - есть крон, я правда не знаю как он там отрабатывает, но тут по мимо крона ещё есть возможность запустить эти парсеры и пользователем вручнут. Вот он захотел обновить. берет и запускает обновление - тоесть его кабинет на какомто сайте начинает парсится, и ему возвращается количество спаршеных(новых и обновленных) записей. Поэтуму нужен какойнить костиль, для начала для js->ajax->php->ajax->js Какие ещё можно варианты придумать? |
|||
|
||||
| studentigor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 397 Регистрация: 14.11.2008 Репутация: нет Всего: нет |
В общем то, мож кому пригодится.
Когда я с аякса шлю запрос на запуск парсера, - я тупо его запускаю, и отвечаю что-то типа парсер запущен. парсер начинает работать независимо, и когда он закончит работать сохраняю результат в сессию, если не отработал - всеравно в сесию записываю что не отработал. В джаваскрипте, одновренно с работой парсера, после того как сделал запуск парсеров через аякс, я начинаю с какой нить периодичностью аяксом запрашивать сервак на наличие в сесси данных о работе парсеров, о как только в сессии эти данные появятся, я отдам их на очередной запрос, и если данные вернутся - запросы прекратятся и я просто выведу результат. вобщем то Aliance наполовину дал решение. Спасибо! |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
Костыль с аяксом не решит ваши проблемы вам нужно переделывать сам крон парсер на порции это 100% без отказное решение проблемы. Начните с крона + со всего остального написанного кода может есть что оптимизировать чем вбивать очередной костыль. -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| studentigor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 397 Регистрация: 14.11.2008 Репутация: нет Всего: нет |
Sanchezzz - я не взлом имел ввиду.
А про то что мало ли какой конфуз может получится, это действительно может привести к неоправданым ресурсо затратам. Я когда описывал проблему, то парсер отрабатывает до конца, просто js недожидается ответа. |
|||
|
||||
| Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
покажите код JS возможно есть узкие места
Это сообщение отредактировал(а) Sanchezzz - 17.10.2012, 11:31 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 14 Всего: 137 |
||||
|
||||
| studentigor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 397 Регистрация: 14.11.2008 Репутация: нет Всего: нет |
была мысль создавать паралельный поток, в котором бы работал парсер, и в конце работы запихнул данные в бд. После того как в одном потеке запустился парсер, второй возвращает ответ в js. В js Я получил ответ, типо парсер запустился, открываю попап окно, и начинаю с каким нить таймаутом бегать на сервер и смотреть, появилась ли нужная запись в бд, если нет, отправляю назад ответ, что ничего нету, а в js смотрю, если ничего нету, то через такойже таймаут опять шлю запрос, пока не получу ответ что в базе что-то есть. Как только чето появилось, вывожу в попап результат, и останавливаю запросы. то что проверяю по бд - это так, для примера. Но такой подход затратный по ресурсам. При создании паралельного потока в 2 раза увеличивается нужда в оперативе, поэтому пока ведутся переговоры. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |