2012-05-07 162 views
4

我正在構建一個網站的後端,該網站在前端需要實時更新多個「小部件」。將數據從ASP.NET MVC控制器推送到視圖

現在我只是簡單地有一個加載方法,用頁面加載時顯示的數據填充所有的小部件。我的問題是如何處理進一步更新的實時方面。

我以爲只有多個ajax調用,它可以每秒查詢一次服務,並返回最新的數據,但這似乎效率低下。

有沒有辦法將「」數據從控制器的視圖?

+0

http://blogs.microsoft.co.il/blogs/gilf/archive/2012/04/10/using-html5-server-sent-events-with-json-and-asp-net-mvc.aspx –

+0

偉大的問題。我會再檢查一下,看看是否有人有一個很好的答案。 –

回答

1

這取決於如何經常需要更新的前端數據。大多數頁面不需要不斷更新。我不知道有一個「最佳實踐」的門檻,但我認爲一個好的起點是使用Ajax進行15-20秒的更新。使您的Ajax調用快速而精益 - 如果沒有更新,也許只是返回空白。如果您需要更快的更新,請查看long polling。長輪詢基本上是你觸發ajax調用服務器的地方,並且連接處於打開狀態直到有數據要發送。長輪詢將佔用更多的服務器資源,因爲在等待數據準備就緒時,您將有打開的連接和線程在運行。在ASP.NET你也不必擔心殺死長輪詢線程,因爲默認情況下這些線程不會被殺死在瀏覽器關閉連接(例如,如果有人導航離開頁面。)

3

也許你可以看看這個項目:https://github.com/SignalR/SignalR

ASP.NET SignalR是ASP.NET開發人員的一個新的圖書館,它使 太簡單了實時網絡功能添加到您的 應用。什麼是「實時網絡」功能?這是 能夠讓您的服務器端代碼將內容推送到連接的客戶端,因爲它實時發生了 。

SignalR也爲此提供服務器 到客戶端RPC一個非常簡單的,高層次的API在ASP.NET應用程序(調用JavaScript函數在客戶端的瀏覽器 從服務器端.NET代碼),以及 爲連接管理添加有用的鉤子,例如連接/斷開連接 事件,分組連接,授權。

(Excerp從http://signalr.net/

希望它能幫助。

+2

請仔細閱讀http://meta.stackexchange.com/a/94027/102937 –

1

您還可以使用Web套接字,如果在瀏覽器中運行支持HTML5

2

我想你最好的選擇是定期輪詢服務器:

$(document).ready(function() { 

    setTimeout("getUpdate()", 30000); 

    function getUpdate() 
    { 
     // Make an ajax call here 
    } 
}); 

這將要求每30秒更新一次。

相關問題