4

从服务器获取一些资源后,我的 MVC 视图页面的一部分每 30 秒刷新一次。我一直在使用 setTimeOut 触发 javascript 方法从服务器异步获取数据,将其与旧数据进行比较,如果已更改,则更新 div 标签。现在,我正在考虑在 global.asax 类中创建一个计时器,在 application_start 事件中启动它,然后在 timer elapsed 事件中,获取数据,并仅在数据发生更改时才使用 SignalR 将其发送给所有客户端。

在这里使用 SignalR 而不是 setTimeOut 会有什么优势吗?

4

1 回答 1

5

这种情况下的好处是,如果该数据没有更改,您将避免不必要地访问服务器。使用 SignalR,您可以仅在数据发生更改时将数据广播到所有客户端。

另一个优点是 SignalR 将使用可用的最佳技术从服务器推送到浏览器,而您不必担心。如果您在带有 ASP.NET 4.5 的 Windows 8 服务器上运行服务器(可能是未来的考虑),这可能是 WebSockets;如果客户端是 Chrome、Firefox 或 Opera,则可能是服务器发送事件;如果客户端是 IE,则可能是 Forever Frame。无论哪种方式,您都不必担心,SignalR 将为您处理传输管理。

根据数据的存储位置和更新方式,您甚至可以完全取消计时器,并在数据发生更改时立即将数据广播给所有客户端。如果它由控制器上的另一个操作方法更新,只需从那里广播给客户端。如果它通过其他进程直接更新到数据库中,您可以在应用程序中(在 App_Start 中)设置 SQL 查询通知,以便在更改时收到警报,然后在此时广播。

于 2011-12-09T17:28:26.640 回答