2010-01-09 31 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将处理将数据推送给客户端。