2010-01-09 146 views
1

我想在網頁上顯示實時更新(基於數據庫表中由外部進程更改的狀態字段)。根據我的研究,有幾種方法可以做到這一點。使用SqlCacheDependency獲取實時更新? - ASP.NET

  • 長輪詢(彗星) - 這似乎是複雜的實施
  • 定期輪詢 - 我可以有一個AJAX方法觸發數據庫命中每次5秒來獲得當前的狀態。但我擔心這會有性能問題。

然後我讀了關於使用SqlCacheDependency - 基本上緩存基於表中的一個字段失效。我假設我可以在緩存失效時使用事件trigerred來向用戶顯示新的更新?

什麼是簡單的解決方案,不會有性能問題?

回答

1

不是輪詢數據庫,更可擴展和高性能的方法是輪詢Web服務器上是否存在文件,如輕量級js文件。 該文件的內容並不重要,但給你一個想法,你可以有一個類型的JSON對象,更詳細地描述該過程的結果。

然後,作爲最後一步進行處理的後臺進程可以創建該文件或調用Web層上的Web服務來執行此操作。

下面是它的工作原理。

用戶按下按鈕過程的哪些文章到服務器

服務器踢和返回的標識符例如C3201620-E622-4fe2-9F3A-E02FFA613F59

的Web UI,然後投票peridodically爲C3201620-E622-4fe2-9F3A-E02FFA613F59.js的存在時,JavaScript將管理404錯誤,並不斷重試直到它接收到200

希望這給你一些想法。

代碼示例處理404在jQuery的

$.ajax({ 
     url: '/CheckForStatusChange/C3201620-E622-4fe2-9F3A-E02FFA613F59.json', 
     type: "GET", 
     success: function(result) { 

     }, 
     error: function(request, status, error) { 
     //handle error here and setTimeOut     

     }); 
+0

性能明智 - 爲什麼你覺得WebUI輪詢文件的存在比輪詢數據庫更好? – Nick 2010-01-14 15:30:17

+0

此外,JS如何管理404錯誤的任何代碼示例? – Nick 2010-01-14 15:31:34

+0

性能可能可以忽略不計,儘管提供靜態文件總是比查詢數據存儲更快。關鍵的區別是可擴展性。 Web服務器非常擅長服務靜態文件,也不一定要將文件存儲在本地Web服務器上,而是可以使用CDN(內容交付網絡),這樣您可以將所有投票流量從您的核心Web服務器。 – willbt 2010-01-14 19:01:32

0

你有2個問題:

  1. 檢索數據推
  2. 數據推到客戶端

項目#1很容易,假設你有一個相當有效的查詢,並且你不會爲每個用戶查詢它;只是查詢,獲取數據並推送它。你可以使用SqlDependency選項,或者你可以輪詢它;這取決於你的數據有多沉重。

項目#2有點棘手,因爲您需要不斷地連接服務器或使用慧星服務器。我們已經編寫了一個高度可擴展的.NET彗星服務器WebSync,位於Frozen Mountain,可能適合該賬單。實質上,您有一個獨立的進程來驅動發佈,WebSync將處理將數據推送給客戶端。