. net网页表单更新网站内容服务器端

本文关键字:服务器端 网站 更新 网页 表单 net | 更新日期: 2023-09-27 18:03:50

我的网站每天有数百名观众使用。其中一个页面有一个计时器,每10秒滴答一次,当它这样做时,它从数据库中获取最新的数据并更新屏幕。

我遇到的问题是,大量的用户和大量的数据库连接会对服务器造成损害。

有更好的方法吗?更新服务器端和所有用户都将受益于最新的数据,但只有服务器每10秒执行一次调用,而不是每个用户?

. net网页表单更新网站内容服务器端

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)

我想这是假设用户在每次投票中都获得相同的数据。如果它们都获得唯一的数据集,这将不适合您。