[英]Pushing data from an ASP.NET MVC Controller to a View
我正在构建一个站点的后端,该站点将在前端有多个“小部件”,需要实时更新。
现在我只是有一个加载方法,用于在页面加载时用数据填充所有小部件。 我的问题是如何处理进一步更新的实时方面。
我想过只有多个ajax调用,它可以每隔一秒左右查询一次服务,并返回最新的数据,但这似乎效率低下。
有没有办法从控制器“ 推送 ”数据到视图?
也许你可以看看这个项目: https : //github.com/SignalR/SignalR
ASP.NET SignalR是ASP.NET开发人员的新库,它使得为应用程序添加实时Web功能变得异常简单。 什么是“实时网络”功能? 它能够让您的服务器端代码实时地将内容推送到连接的客户端。
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的浏览器中运行,也可以使用它
这取决于前端数据需要更新的频率。 大多数页面不需要不断更新。 我不知道有一个“最佳实践”门槛,但我认为一个好的起点是使用Ajax进行15-20秒的更新。 快速,精简地进行Ajax调用 - 如果没有更新,可能只返回空白。 如果您需要更快的更新,请查看称为long polling
。 长轮询基本上是您触发对服务器的ajax调用的地方,并且连接处于打开状态,直到有数据要发送。 长轮询将占用更多服务器资源,因为在等待数据准备就绪时,您将打开连接和线程。 使用ASP.NET,您还必须担心杀死长轮询线程,因为默认情况下,当浏览器关闭连接时,这些线程不会被杀死(例如,如果某人导航离开页面。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.