1

我想在网页上显示实时更新(基于由外部进程更改的数据库表中的状态字段)。根据我的研究,有几种方法可以做到这一点。

  • 长轮询(彗星) - 这似乎实现起来很复杂
  • 定期轮询 - 我可以让 AJAX 方法每 5 秒触发一次数据库命中以获取当前状态。但我担心这会有性能问题。

然后我读到了使用SqlCacheDependency- 基本上缓存会根据表中的字段而失效。我假设我可以使用缓存失效时触发的事件向用户显示新更新?

什么是不会出现性能问题的简单解决方案?

4

2 回答 2

1

与轮询数据库不同,一种更具可扩展性和性能的方法是轮询 Web 服务器上是否存在文件,例如轻量级 js 文件。文件的内容并不重要,但为了让您了解,您可以拥有某种 JSON 对象,该对象更详细地描述了该过程的结果。

然后,作为最后一步进行处理的后台进程可以创建文件或调用 Web 层上的 Web 服务来执行此操作。

这是它的工作原理。

用户按下发布到服务器的按钮

服务器启动进程并返回一个标识符,例如 C3201620-E622-4fe2-9F3A-E02FFA613F59

Web UI 然后定期轮询 C3201620-E622-4fe2-9F3A-E02FFA613F59.js 的存在,javascript 将管理 404 错误并继续重试,直到收到 200

希望这能给你一些想法。

在 jQuery 中处理 404 的代码示例

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

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

        }); 
于 2010-01-13T19:53:38.133 回答
0

你有2个问题:

  1. 检索要推送的数据
  2. 将数据推送给客户端

项目#1 很简单,假设您有一个相当有效的查询,并且您不是为每个用户查询它;只需查询、获取数据并推送。您可以使用 SqlDependency 选项,也可以只轮询它;这取决于您的数据量。

项目 #2 有点棘手,因为您需要不断地访问服务器,或者使用彗星服务器。我们在 Frozen Mountain 编写了一个高度可扩展的 .NET comet 服务器WebSync,它可能符合要求。本质上,您有一个单独的流程来驱动发布,而 WebSync 将处理将数据推送到您的客户端。

于 2010-04-01T03:55:14.847 回答