将轮询迁移到SignalR而不在服务器上进行轮询?

时间:2018-10-02 02:52:34

标签: c# asp.net-core signalr polling

我的Web应用程序中有一项功能,可以启动服务器上长期运行的报告。当前,我的客户端上有一个ajax方法,该方法一直运行,以检查当前运行的报告是否完整。它通过重复调用查询数据库的方法来确定给定报告的状态是否已从Running更改为ErrorComplete来实现。报告完成后,我将执行ajax加载以获取数据。

我正在考虑实现SignalR,以向其他页面添加一些其他功能,并且我认为这是使事情顺利进行的好测试案例。我主要关心的是如何在报告完成时提醒客户。使用SignalR,我可以简单地说:

public class ReportHub : Hub
{
    public async Task ReportComplete(string userId, ReportRunStatus guid)
    {
        await Clients.User(userId).SendAsync("ReportComplete", guid);
    }
}

但是,我想避免在服务器上放置长时间运行的循环,因为随着操作规模的扩大,这可能会降低性能。除了简单地轮询直到完成,还有更好的方法来检查报告状态并向客户端发出警报吗?还是有一些简单的方法可以不断查看表格并提醒已完成的报告?

0 个答案:

没有答案