2012-03-16 33 views
0

我一直在環顧四周,我需要做出各種各樣的定時器解決方案。在ajax環境。聽起來不錯,但我不想每隔1-5秒發一個新的請求,以確保頁面上有最新的更新數據。 所以我聽說過有關signalR的一些信息,但這聽起來過於複雜,我想大多數情況下這對我來說都是未知的。 我也讀過一些關於silverlight能夠幫助這種努力的東西。如何使用剃鬚刀引擎更新mvc 3中數據庫更改的頁面/(頁面上的對象)?

案例很簡單我有一張填充了數據庫值的圖表,現在這個數據庫每天都在變化,有些時候它不會保留任何新的數據幾個小時。我希望能夠顯示當前的實時數據。我使用的是Razor引擎,mssql數據庫和IIS Express 7.5的MVC 3。

我在這個環境之外的選擇非常有限。

它只會在本公司內部使用。將有10-50個地方訪問該頁面。我擔心的不是超負荷的公司服務器和網絡。

在此先感謝您的任何答案。

我想討論一下技術,我希望找到這個解決方案的最小侵入性和快速/最簡單的開發時間。

+0

您可以在JavaScript中使用AsyncController中的計時器嗎? – Silvermind 2012-03-16 10:20:45

+0

我不會太在意輪詢和每3秒發出一次請求。其他解決方案似乎對我來說是一個矯枉過正。只需使用輪詢,使用AJAX只刷新您需要的內容,如果需要,可以對其進行優化,以便在沒有更改時發送小信息而不是全部數據。 – Arek 2012-03-16 10:26:31

+0

感謝大家。 這裏的討論已經打開了我的眼睛,用於共享解決方案,其中每X分鐘將新數據拉入主頁。 – Helbo 2012-03-20 10:07:53

回答

1

正如您已經確定的那樣,您可以定期使用AJAX進行輪詢以查看是否需要刷新。如果這聽起來不太好,你可以嘗試一種COMET方法,其中包括打開客戶端和服務器都保持打開狀態的請求,直到服務器收到消息。那時,它會發送一條消息給你希望的任何指令(如重新加載此頁面)並結束連接,然後客戶端腳本將對此消息進行處理。一個實際的例子是Facebook如何處理通知。最終的結果是您的服務器的流量減少,用戶在客戶端體驗到神奇的「即時」響應。另一方面,這種方法需要在服務器和應用程序上進行適當的構建和調整,因爲保持大量連接打開會產生問題。

There are some ASP.NET modules for implementing a COMET solution(和Signalr聽起來像這樣的解決方案之一),但我想知道爲什麼輪詢選項是如此糟糕,如果你只在Intranet上使用它。您不一定需要在客戶的幾個獨立區域進行投票;你可以有一個通知器(這裏全是JS,介意你),它需要其他組件的訂閱,這些組件提交他們希望你檢查的東西的細節。然後通過一個包含所有相關訂閱的消息,通過AJAX輪詢一次MVC操作。我不認爲這是一個大的網絡破壞者,因爲我有一個應用程序可以在相當大的範圍內執行此操作。

在服務器端,您的操作會將該消息解析爲作業,根據請求檢查每個作業,併發送響應消息(如果有任何要執行的操作)。然後,您的客戶端通知程序接收消息並將結果發送給任何訂戶(如果有任何事情需要做)(一個簡單的例子:刷新頁面,或者更恰當地說,刷新頁面中發生更改的部分......您可以使用JavaScript-最好通過jQuery-用從您的MVC操作中檢索到的HTML替換元素的內容來改變內容)。

聽起來很複雜,但並不是真的,特別是與管理COMET解決方案相比,您可以使用現成的技術來完成此任務。你提到聽起來像是使用WCF duplex service contract using a dual HTTP binding,這將允許服務器發起請求到客戶端

Silverlight的技術。這當然是一種選擇,因爲您可以擁有一個Silverlight通知器應用程序,類似於我之前提到的,您可以坐在您的頁面中,接收訂閱者並從服務器接收推送消息。我沒有機會在實際應用中實現雙工服務,所以我不知道它在生產環境中的實用性。

0

如果你有填充值的圖表,你希望它是最新的,在所有的時刻,那會不會對用戶來說是非常混亂,如果數據在每一秒的變化?

我會實現一個JavaScript調用,將刷新某些股利每x秒,如setTimeout("Refresh()",2000);

你可以做的刷新方法Ajax調用,將返回一個局部視圖圖表。

相關問題