. net网页表单更新网站内容服务器端
本文关键字:服务器端 网站 更新 网页 表单 net | 更新日期: 2023-09-27 18:03:50
我的网站每天有数百名观众使用。其中一个页面有一个计时器,每10秒滴答一次,当它这样做时,它从数据库中获取最新的数据并更新屏幕。
我遇到的问题是,大量的用户和大量的数据库连接会对服务器造成损害。
有更好的方法吗?更新服务器端和所有用户都将受益于最新的数据,但只有服务器每10秒执行一次调用,而不是每个用户?
SignalR是您想要的方式。现在,您的应用程序可能正在加载一个页面。然后你有一些jQuery可能会设置一个10秒的计时器。然后你的计时器开始启动,你可能会做一个ajax调用来获得刷新的数据,然后把刷新的数据放入<div>
或其他东西。
所以本质上,每10秒,你的后端调用你的SQL服务器,做一些SELECT
语句,然后从SQL服务器的数据被传输到你的应用服务器,在那里你把这些数据转换成可显示的数据。
SignalR的工作方式不同。它使用推送技术。推送技术是这样工作的。假设现在有5个人访问你的页面。一个人(人A)正在做一些事情,将一些东西保存到数据库中。但还没有其他人看到这些数据。但是SignalR会向其他所有人发送一个信号(或者只是这个数据库保存影响的人),说"嘿!有更新的数据可用。你现在应该更新。"连接的其他人执行ajax调用并获得刷新的数据。和中提琴!其他4个人现在已经在他们的屏幕上更新了数据!
我希望我解释得足够清楚,让你明白!Scott Hanselman写了一个关于SignalR的很好的介绍
我将使用setInterval()每10秒触发一个ajax函数。
window.setInterval("javascript function", milliseconds);
javascript函数类似于
function GetLatest(){
$.ajax({
type: 'POST',
url: '../Services/UpdateService.asmx/GetLatest',
data: '',
contentType: "application/json; charset=utf-8",
success: function (data) {
//use the data.d to get the info passed back from webservice. then
add your logic to update your html
},
error: function () {
//catch any bad data
}
});
}
你的后端方法应该是这样的。对象就是你的对象
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public Object GetLatest()
{
Object obj= new Object ();
obj.FirstName = "Dave";
obj.LastName = "Ward";
return obj;
}
您是否考虑过让服务器端代码缓存这10秒的数据?缓存它并设置它的过期时间为10秒。这样,每个人在10秒内获得相同的信息,然后在这10秒之后的第一个人检索一个新的数据集,然后缓存它。这样,只有第一个刷新的人会触发DB查询,其余的人会得到10秒前的数据。像这样:
Cache.Insert(key, data, Nothing, DateTime.Now.AddSeconds(10), TimeSpan.Zero)
我想这是假设用户在每次投票中都获得相同的数据。如果它们都获得唯一的数据集,这将不适合您。