2016-12-09 5 views
0

こんにちはSignalRの専門家を聞いているデータベースIFFからはSignalR-私はデータのグラフを表示するには、ライブダッシュボードを作成する必要があり、少なくとも1つのクライアントが

をデータをプルで提案されているようコードを実装していますdatabase.Iから引き出さサイトポイントブログ(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); 
     } 

    } 
} 

代わりにどのクライアントがリッスンされていない場合でも、データベースからデータを引っ張って、私はデータを取得したいです少なくとも1つのクライアントがリッスンしていて、クライアントがリッスンしていない場合にデータをプルすることを停止した場合に限り、これは可能ですか?任意の提案..

+0

最初の接続後に 'OnConnect'とそれを実行するロック機構を使用できますか? –

答えて

2

this answerを参考にしてください。

ダッシュボードデータを取り込む前に、条件としてUserHandler.ConnectedIds.Any()をチェックしてください。

関連する問題