将数据从ASP.NET MVC控制器推送到View

我正在构建一个站点的后端,该站点将在前端有多个“小部件”,需要实时更新。

现在我只是有一个加载方法,用于在页面加载时用数据填充所有小部件。 我的问题是如何处理进一步更新的实时方面。

我想过只有多个ajax调用,它可以每隔一秒左右查询一次服务,并返回最新数据,但这似乎效率低下。

有没有办法从控制器“ 推送 ”数据到视图?

这取决于前端数据需要更新的频率。 大多数页面不需要不断更新。 我不知道有一个“最佳实践”门槛,但我认为一个好的起点是使用Ajax进行15-20秒的更新。 快速,精简地进行Ajax调用 – 如果没有更新,可能只返回空白。 如果您需要更快的更新,请查看称为long polling 。 长轮询基本上是您触发对服务器的ajax调用的地方,并且连接处于打开状态,直到有数据要发送。 长轮询将占用更多服务器资源,因为在等待数据准备就绪时,您将打开连接和线程。 使用ASP.NET,您还必须担心杀死长轮询线程,因为默认情况下,当浏览器关闭连接时,这些线程不会被杀死(例如,如果某人导航离开页面。)

也许你可以看看这个项目: https : //github.com/SignalR/SignalR

ASP.NET SignalR是ASP.NET开发人员的新库,它使得为应用程序添加实时Webfunction变得非常简单。 什么是“实时网络”function? 它能够让您的服务器端代码实时地将内容推送到连接的客户端。

SignalR还提供了一个非常简单的高级API,用于在ASP.NET应用程序中执行服务器到客户端RPC(在客户端的浏览器中从服务器端.NET代码调用JavaScript函数),以及为连接管理添加有用的钩子,例如连接/断开事件,分组连接,授权。

(摘自http://signalr.net/ )

希望能帮助到你。

我认为你最好的选择是定期轮询服务器:

 $(document).ready(function() { setTimeout("getUpdate()", 30000); function getUpdate() { // Make an ajax call here } }); 

这将要求每30秒更新一次。

如果Web套接字在支持HTML5的浏览器中运行,也可以使用它