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