SignalR vs setTimeout

Gok*_*ath 4 asp.net-mvc signalr

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

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

Dam*_*rds 5

在这种情况下的优点是,如果数据没有改变,你将避免不必要的服务器之旅.使用SignalR,只有在数据发生变化时才能将数据广播到所有客户端.

另一个优点是SignalR将使用最好的技术从服务器推送到浏览器,而不必担心它.如果您在使用ASP.NET 4.5的Windows 8服务器上运行服务器(可能是未来的考虑因素),则可以是WebSockets,如果客户端是Chrome,Firefox或Opera,则可以是Server Sent Events,如果客户端是IE,则可以是Forever Frame.无论哪种方式,您都不必担心,SignalR将为您负责运输管理.

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