2016-03-18 6 views
0

1) Мне нужно следующее требование: Запрос клиента (длительный процесс) должен ждать, пока сервер будет обслуживать запрос.Дифференцировать событие закрытия браузера и выход из системы

Текущее решение: Клиент инициирует запрос с последующим запросом пинг через каждые 5 секунд, чтобы проверить состояние запроса и с этим также поддерживает сеанс.

2) Если клиент переходит на другую вкладку приложения и возвращается, клиент должен показать статус процесса, и сервер должен продолжить работу над запросом.

3) Если клиент закрывает браузер или выходит из системы, сервер должен остановить процесс.

PS: Вам нужны функциональные возможности для всех браузеров после IE-9, Chrome и Firefox.

ответ

1

Существует много способов кошки кошки, но я бы это сделал.

1, присвойте уникальный идентификатор запросу (вы, скорее всего, сделали это, когда вы запрашиваете состояние готовности каждые несколько секунд).

Задайте члену своих данных сеанса уникальному идентификатору.

Установите все свои страницы, чтобы загрузить JS, необходимые для постоянной проверки процесса, но JS НЕ должен использовать какой-либо идентификатор.

В скрипте, который анализирует запрос ajax, проверите его для уникального идентификатора и обновите внутреннюю систему (файл или базу данных) со временем последнего запроса и уникальным идентификатором. и нажмите назад детали, если есть детали, которые нужно нажать.

В другой системе (например, в cron-системе) или в самом процессе (если в цикле, например), он проверяет ту же базу данных или файловую систему, которая обновляется с отметкой времени для уникального идентификатора и последней метки времени. Если временная метка слишком старая, скажем 15 секунд (помните, что время загрузки страницы может задержать 5-секундный интервал), а затем убить процесс, если cron'd, или самоубийство процесса, если в самом скрипте процесса.

Выход из системы будет убивать данные сеанса, что делает невозможным обновление таблицы/файла (и для этого должна быть проверка), и это сделает так, что в течение следующих нескольких секунд после выхода из системы процесс прекратится.

+0

Мне понравилась концепция сохранения идентификаторов и таймера в файле или БД. Есть ли другой способ, в котором нам не нужно добавлять JS повсюду? – krupalpatel86

+0

Вы можете увеличить время ожидания, но то, что вам действительно нужно, - это состояние активности, которое может считывать бэкэнд-система. если вы полностью исключаете javascript, тогда вам нужно будет установить тайм-аут примерно на 2-3 минуты и сбросить его при каждой навигации по страницам. Это также надеется, что человек не просто сидит на странице в течение 10 минут, наблюдая за ходом процесса. если прогресс не будет активно обновляться через постоянную проверку (например, непрерывный ajax), то это может быть наиболее жизнеспособным вариантом. –

0

Вы не сможете найти надежного решения для выхода. window.onbeforeunload не позволит вам общаться с сервером (вы можете запрашивать у пользователя только встроенный диалог, и это в значительной степени). Возможно, вместо того, чтобы найти решение по захвату logout/abandon, добавьте некоторую логику в процесс сервера, чтобы дождаться этих пингов (возможно, за 30 секунд до отказа). таким образом, вы не тратите много циклов сервера, и у вас все еще есть мониторинг, который работает по-прежнему.

Смежные вопросы