| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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. Клиента редиректаем на страницу ожидания. Там аджаксом периодически проверяем статус задачи по айди. По готовности редиректаем на страницу чтения результата. Если клиент не дождался и закрыл окно, перехватываем событие и аджаксом же шлем сигнал отмены. В это времы некий независимый сервис периодически проверяет наличие новых задач. При наличии, начинает выполнять и иногда посматривает, не произошла ли отмена. Выполнив, меняет статус. Вот и все. Плюсы очевидны: веб сервер занимается только своим делом, устраняем риск обрыва при долгом ожидании, вычыслительная часть легко масштабируется на сколько надо машин. Пользователь может даже вообще закрыть браузер и потом вернуться посмотреть свои задачи. И еще много положительных моментов можно домыслить. |