У меня есть часть функциональности в моем веб-приложении, которая запускает длительный отчет на моем сервере.В настоящее время у меня есть метод ajax на моем клиенте, который постоянно работает, чтобы проверить, завершен ли текущий запущенный отчет.Это делается путем многократного вызова метода, который запрашивает базу данных, чтобы определить, изменился ли статус данного отчета с Running
на Error
или Complete
.Когда отчет закончен, я выполняю ajax-загрузку для получения данных.
Я смотрю на реализацию SignalR, чтобы добавить некоторые дополнительные функции на другие страницы, и я подумал, что это будет хороший тестовый пример, чтобы получитьдела идутМоя главная задача - как предупредить клиента о завершении отчета.Используя SignalR, я могу просто сказать что-то вроде:
public class ReportHub : Hub
{
public async Task ReportComplete(string userId, ReportRunStatus guid)
{
await Clients.User(userId).SendAsync("ReportComplete", guid);
}
}
Тем не менее, я хочу попытаться избежать длительного цикла запуска на сервере, так как боюсь, что это может привести к снижению производительности по мере увеличения масштабов операций.Есть ли лучший способ справиться с проверкой состояния отчета и предупреждением клиентов, чем просто опрос до завершения?Или есть какой-то простой способ постоянно смотреть на стол и получать уведомления о заполненных отчетах?