Контекст:
Из моего веб-интерфейса javascript я запускаю длительную (несколько минут) операцию, выполняемую на бэкенде .NET2.0. Вызов немедленно возвращается с идентификатором операции, в то время как длительная операция выполняется параллельно. Операции не загружают процессор, но выполняют медленные сетевые вызовы. После завершения операции я хочу увидеть результаты в веб-интерфейсе.
Вопрос: Как я могу уведомить клиента о завершении работы?
Варианты, которые я рассмотрел:
Вариант 1 : я запускаю длительную операцию асинхронно напрямую из JS и ожидаю, что возвращаемое значение будет конечным результатом, а не идентификатором операции. Моя библиотека AJAX позаботится обо всем, и жизнь выглядит очень легкой и аккуратной. Проблема в том, что на стороне сервера поток является потоком ThreadPool, который я сейчас блокирую на несколько минут . Вам не нужно слишком много длительных параллельных запросов, чтобы заставить ThreadPool голодать и поставить весь сервер на колени, даже если имеется достаточная вычислительная мощность.
Опция 2 : С идентификатором операции я начинаю опрашивать сервер, если операция завершена. Однако это атака типа «отказ в обслуживании» против моего собственного сервера. Кроме того, должно быть справедливое решение AJAX. Это не единственная проблема.