将数据从 ASP.NET MVC 控制器推送到视图
本文关键字:视图 控制器 MVC 数据 ASP NET | 更新日期: 2023-09-27 18:33:21
我正在构建一个站点的后端,该站点的前端将有多个需要实时更新的"小部件"。
现在我只有一个加载方法,它显然在页面加载时用数据填充所有小部件。我的问题是如何处理进一步更新的实时方面。
我想到只有多个 ajax 调用,它们可以每秒左右查询一个服务,并返回最新数据,但这似乎效率低下。
有没有办法将数据从控制器"推送"到视图?
也许你可以看看这个项目: https://github.com/SignalR/SignalR
ASP.NET SignalR 是面向 ASP.NET 开发人员的新库,使其 将实时 Web 功能添加到您的 应用。什么是"实时网络"功能?这是能力 让服务器端代码将内容推送到连接的客户端 它实时发生。
SignalR 还提供了一个非常简单的高级 API 来执行服务器 到客户端 RPC(在客户端的浏览器中调用 JavaScript 函数) 来自服务器端 .NET 代码)以及 ASP.NET 应用程序中 为连接管理添加有用的钩子,例如连接/断开连接 事件, 分组连接, 授权。
(摘自 http://signalr.net/)
希望对您有所帮助。
我认为你最好的选择是定期轮询服务器:
$(document).ready(function() {
setTimeout("getUpdate()", 30000);
function getUpdate()
{
// Make an ajax call here
}
});
这将要求每 30 秒更新一次。
这取决于前端数据需要更新的频率。大多数页面不需要不断更新。我不知道是否有"最佳实践"阈值,但我认为一个好的起点是使用 Ajax 进行 15-20 秒的更新。快速而精简地进行 Ajax 调用 - 如果没有更新,也许只是返回空白。如果您需要比这更快的更新,请查看称为 long polling
.长轮询基本上是触发对服务器的 ajax 调用,并且连接保持打开状态,直到有数据要发送。长轮询将占用更多的服务器资源,因为在等待数据准备就绪时,您将有打开的连接和线程运行。有了 ASP.NET 您还必须担心杀死长轮询线程,因为默认情况下,当浏览器关闭连接时(例如,如果有人离开页面),这些线程不会被杀死。
您也可以使用 Web 套接字,如果它在支持 HTML5 的浏览器中运行