从ASP.NET MVC控制器向视图推送数据

4
我正在构建一个后端网站,该网站将在前端具有多个“小部件”,这些小部件需要实时更新。
目前,我仅有一个加载方法,在页面加载时填充所有小部件的数据。我的问题是如何处理进一步更新的实时方面。
我想过只使用多个ajax调用,每秒钟查询一次服务并返回最新的数据,但这似乎效率低下。
是否有一种从控制器向视图“推送”数据的方法?

http://blogs.microsoft.co.il/blogs/gilf/archive/2012/04/10/using-html5-server-sent-events-with-json-and-asp-net-mvc.aspx - Robert Harvey
好问题。我会回来查看是否有好的答案。 - Daniel Bidulock
4个回答

3

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

ASP.NET SignalR是一个新的库,为ASP.NET开发人员提供了非常简单的方法,将实时Web功能添加到您的应用程序中。什么是“实时Web”功能?它是指您的服务器端代码能够在发生事件时向连接的客户端推送内容,实现实时更新。

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

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

希望对你有所帮助。


2

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

$(document).ready(function() {

    setTimeout("getUpdate()", 30000);

    function getUpdate()
    {
        // Make an ajax call here
    }
});

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

1

如果浏览器支持HTML5,您也可以使用Web Sockets。


1

这取决于前端数据需要多频繁地更新。大多数页面不需要持续更新。我不知道是否有一个“最佳实践”的阈值,但我认为一个好的起点是使用 Ajax 进行 15-20 秒的更新。让你的 Ajax 调用快速且轻量级 - 如果没有更新可能只返回空白。如果需要比这更快的更新速度,请查看称为“长轮询”的东西。长轮询基本上是触发一个向服务器的 Ajax 调用,连接一直保持打开状态,直到有数据要发送。长轮询将占用更多的服务器资源,因为你将拥有开放的连接和线程,在等待数据准备好时运行。在 ASP.NET 中,您还需要担心杀死长轮询线程,因为默认情况下,当浏览器关闭连接时(例如如果有人从页面导航离开),这些线程不会被终止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接