从服务器获取一些资源后,我的MVC视图页面的一部分每30秒刷新一次。我一直在使用setTimeOut触发javascript方法异步从服务器获取数据,将其与旧数据进行比较,如果已更改,则更新div标签。现在,我正在考虑在global.asax类中创建一个计时器,在application_start事件中启动它,在timer elapsed事件中,获取数据,并且只有在数据发生变化时才使用SignalR将它发送给所有客户端。
在这里使用SignalR over setTimeOut会有什么好处吗?
答案 0 :(得分:5)
在这种情况下的优点是,如果数据没有改变,你将避免不必要的服务器之旅。使用SignalR,只有在数据发生变化时才能将数据广播到所有客户端。
另一个优点是,SignalR将使用最好的技术从服务器推送到浏览器,而不必担心它。如果您在使用ASP.NET 4.5的Windows 8服务器上运行服务器(可能是未来的考虑因素),则可以是WebSockets,如果客户端是Chrome,Firefox或Opera,则可以是Server Sent Events,如果客户端是IE,则可以是Forever Frame。无论哪种方式,您都不必担心,SignalR将为您负责运输管理。
根据您的数据存储位置及其更新方式,您甚至可以完全取消计时器,并且只要数据发生变化,就可以立即将数据广播到所有客户端。如果它由控制器上的另一个操作方法更新,则只从那里向客户端广播。如果通过其他进程直接更新到数据库中,您可以在应用程序中设置SQL查询通知(在App_Start中),以便在更改时收到警报,然后在此时进行广播。