Никто не подскажет где конкретно можно почитать или поглядеть пример реализации такой логики.
1) От пользователя приходит запрос к handler вида my.handler?id=55
2) Хендрел смотрит кэш данных соответствующего указанному id. Если данные "свежие", то отдаем их — работа завершена.
3) Если данные устарели, то пробуем запустить поток обновления данных для указанного id (асинхронно). При это все равно отдаем текущие данные и завершаем обработку (подразумевается что поток обновления остается жив).
4) Если в момент запуска поток уже есть (т.е. процесс обновления уже начат запросов другого пользователя), то просто "продляем" время жизни потока, отдаем cache и завершаем работу.
5) Сам поток обновления циклично обновляет данные и "живет" указанное время. Каждый новый запрос увеличивает срок жизни потока.
Собственно вопрос в создании асинхронного потока и комуникации с ним (передачу ему запроса и получения сего статуса). Может кто подскажет?
... << RSDN@Home 1.2.0 alpha 4 rev. 1228>>
Могу предложить альтернативное решение:
1. Есть хендлер, который отдает текущие данные
2. Есть win-сервис, которые эти данные периодически обновляет
Будет правильнее, проще и производительнее
... << RSDN@Home 1.2.0 alpha 4 rev. 1227>>
А все таки стало интересно, возможно (и если да, то как и какие есть тонкости) создать поток на сервере, который бы отрабатывал асинхронно. При этом пользователь не ждал бы завершения операции. Или для такого только сервис?
Ну например (чисто для примера, что первое придумал), по заходу пользователя вычисляется некая статистики и записывается в БД. Т.е. мы выдали саму страницу и пользователю уже от нас ничего не надо. Вот с этого момента мы завершаем вывод (пользователь получает страницу), а на сервере рождается некий поток, который обрабатывает данные статистики и записывает их в БД.
Асинхронный хэндлер я знаю, но он ждет поток и только тогда идет выдача пользователю.
... << RSDN@Home 1.2.0 alpha 4 rev. 1228>>