2013-04-20 41 views
2

在我的網頁上(寫在asp.net mvc3上),用戶可以在ms sql數據庫中創建一個時間表,然後用戶需要被通知計劃完成以及作爲其結果的一些數據。SignalR能否幫助這種情況 - 檢測沒有輪詢的計劃完成?

爲了探測計劃完成的(其唯一的ID,將有助於對完成表消失),目前我做的AJAX投票,那麼額外的Ajax調用從數據庫中獲取結果數據。

可以通過使用SignalR來改善這種情況,如果是這樣,怎麼辦?

回答

3

可這種情況下可以通過使用SignalR和改進,如果是這樣,如何?

當然它可以得到改善。目前,我假設您正在進行Ajax輪詢,但不知道何時需要刷新頁面以顯示計劃完成的更新。通過SignalR實現,您將擁有一個使用集線器方法和客戶端回調來處理服務器集線器回調的服務器端集線器。您不需要您的客戶端來輪詢服務器以查看是否有任何更新。但是,您需要在服務器內部(可能是BG工作人員)內部使用輪詢機制來檢測計劃完成情況(假設這是一項自動活動)。 Signalr不會自動執行這些操作,您需要將呼叫從服務器發起到客戶端集線器訂閱。

就像一個簡單的原型爲您的情況,您可以在服務器上創建一箇中心說只是爲前: -

ScheduleHub可能有2個功能說CreateScheduleSetScheduleCompletion。 提供setScheduleCompletion知道

在您的客戶端的JavaScript你會得到hubConnection實例

var scheduleCheckHub= $.connection.scheduleHub; 
//when the use 
    $("#createSchedule").click(function() { 
        scheduleCheckHub.server.createSchedule(somedata); 
       }); 

客戶端樞紐方法回調來處理來自服務器的回調。

scheduleCheckHub.client.updateScheduleStatus = function (data) { 
       //do something 
      }; 

您將有連接啓動,停止,重新連接邏輯等

$.connection.hub.start().done(function() { 
       //do something 
      }); 
     ..... 

在您的服務器中心SetScheduleCompletion方法

public void SetScheduleCompletion() 
    { 
..... 
//some code that knows when the schedule has been completed. 
//Now i know that this schedule has been completed so 
//push this to all the clients, ok then make the call back to the client hub proxy method 
     Clients.All.updateScheduleStatus(responseObject); 
//No i just want to send this to only specific clients. Ok then do this 
    var subscribers = Clients.Group(someIdentifierToGetGroups); 
    subscribers.updateScheduleStatus(responseObject); 
} 

同樣的事情可以根據應用程序的複雜變化。這是一個非常簡單的場景和實施。

+0

感謝您的時間和示例,有時我會深入研究。 – bob 2013-04-21 00:17:56

1

如果您要使用SignalR,應用程序的結構會稍微改變。

例如,而不是在客戶端AJAX輪詢你有你的服務器或者投票或在完成時間表某種方式得到更新。

一旦SignalR知道的時間表完成那麼就可以將數據推到客戶端(S)與有關計劃完成的信息。

+0

@Taylor感謝您的確認。我一直對投票一直感到不安,這將是一個令人興奮的機會,讓它變得更好!也許服務器可以使用sqldependency在計劃完成時獲取通知,獲取數據並將數據推送到客戶端。不知道服務器可以指出哪個客戶端獲取數據而不是廣播。 – bob 2013-04-20 23:38:46

相關問題