SignalR- 如果至少有一个客户端正在监听,则从数据库中提取数据

SignalR- Pull Data from database iff at least one client is listening

您好 SignalR 专家,

我需要创建一个实时仪表板来显示从 database.I 提取的数据图表,我正在按照 sitepoint 博客 (https://www.sitepoint.com/build-real-time-signalr-dashboard-angularjs/) 中的建议实施代码。即使没有客户端在监听,它也会在站点启动后立即从服务器端提取数据。

Startup.cs代码

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);

        var hubConfiguration = new HubConfiguration();
        hubConfiguration.EnableDetailedErrors = true;
        app.MapSignalR();


        //is this the right place for this code

        DashboardService dashboardService = new DashboardService(10000); //10 second
        Task.Factory.StartNew(async () => await dashboardService.GetDataFromDatabase());
    }
}

DashboardService.cs

public class DashboardService
{
    private IHubContext _hubs;
    private readonly int _pollIntervalMillis;


    public DashboardService(int pollIntervalInMilliSec)
    {
        _hubs = GlobalHost.ConnectionManager.GetHubContext<DashboardHub>();
        _pollIntervalMillis = pollIntervalInMilliSec;

    }

   public async Task GetDataFromDatabase()
   {
        while (true)
        {
            await Task.Delay(_pollIntervalMillis);

            //Data Logic to pull data from database

             _hubs.Clients.All.broadcastToDashboard(broadcastObject);
        }

   }
}

我不想在没有客户端监听的情况下从数据库中提取数据,而是希望仅当至少有一个客户端在监听时才从数据库中提取数据,如果没有客户端在监听则停止拉取数据。这可能吗?任何建议..

参考this answer

然后在提取仪表板数据之前检查 UserHandler.ConnectedIds.Any() 作为条件。