Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Сигнал от Apache скрипту CGI об обрыве связи


Автор: DProf 27.10.2014, 13:42
Добрый день!

Apache+CGI. По запросу из JS xml http request -ом запускается на выполнение тяжелый cgi скрипт на perl. Он может работать очень долго (до 5 минут и больше). Задача - прервать его выполнение в случае, если пользователь отменил запрос (xml http request abort) или даже просто закрыл страницу/браузер.

Как в скрипте отловить обрыв связи и тот факт, что уже никто не ждет ответа? И прервать его выполнение. А то после xml http request abort или закрытия страницы Apache НИЧЕГО не делает с порожденным запросом процессом, позволяя ему доработать до конца и ресурсов много уходит на выполнение задачи, которая уже никому не нужна.

Автор: infarch 30.10.2014, 12:37
Для начала, НИКОГДА ТАК НЕ ДЕЛАЙТЕ. Ждать результат тяжелой задачи в реалтайме это для мазохистов. Правильнее так:
1. Разместить задачу. Это может быть запись в базу данных со всеми необходимыми параметрами. Получаем айди и возвращаем клиенту.
2. Клиента редиректаем на страницу ожидания. Там аджаксом периодически проверяем статус задачи по айди. По готовности редиректаем на страницу чтения результата. Если клиент не дождался и закрыл окно, перехватываем событие и аджаксом же шлем сигнал отмены.

В это времы некий независимый сервис периодически проверяет наличие новых задач. При наличии, начинает выполнять и иногда посматривает, не произошла ли отмена. Выполнив, меняет статус.

Вот и все. Плюсы очевидны: веб сервер занимается только своим делом, устраняем риск обрыва при долгом ожидании, вычыслительная часть легко масштабируется на сколько надо машин. Пользователь может даже вообще закрыть браузер и потом вернуться посмотреть свои задачи. И еще много положительных моментов можно домыслить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)