Миграция опроса в SignalR без опроса на сервере?
У меня есть часть функциональности в моем веб-приложении, которая запускает длительный отчет на моем сервере. В настоящее время у меня есть метод 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);
}
}
Тем не менее, я хочу попытаться избежать длительного цикла на сервере, так как боюсь, что это может привести к снижению производительности по мере увеличения масштабов операций. Есть ли лучший способ справиться с проверкой состояния отчета и предупреждением клиентов, чем просто опрос до завершения? Или есть какой-то простой способ постоянно смотреть на стол и оповещать о готовых отчетах?