Веб-формы .NET обновляют контент на стороне сервера

1

У меня есть веб-сайт, используемый сто зрителей каждый день. На одной из страниц есть таймер, который тикает каждые 10 секунд, когда он делает это, он получает последние данные из базы данных и обновляет экран.

Проблема заключается в том, что большое количество пользователей и большое количество подключений к базе данных связывают его с сервером.

Есть ли лучший способ сделать это? Обновление серверной части и всех пользователей выиграет от последних данных, но только сервер выполняет вызовы каждые 10 секунд, а не каждый пользователь?

Теги:

3 ответа

1

SignalR - это то, как вы захотите. Прямо сейчас ваше приложение, вероятно, загружает страницу. Затем у вас есть jQuery, который, вероятно, устанавливает таймер на 10 секунд. Затем ваш таймер начинает, и вы, вероятно, делаете вызов ajax для получения обновленных данных, а затем помещаете эти обновленные данные в <div> или что-то в этом роде.

Таким образом, каждые 10 секунд ваш задний конец вызывает ваш SQL-сервер, выполняя какой-то SELECT, затем данные с SQL Server передаются на ваш сервер приложений, где вы принимаете эти данные, преобразуясь в отображаемые данные.

SignalR, с другой стороны, работает по-другому. Он использует технологию push. Технология Push работает так. Допустим, у вас сейчас 5 человек, которые посещают вашу страницу. Один человек (человек A) делает что-то, что что-то сохраняет в базе данных. Пока никто этого не видит. Но SignalR отправит сигнал всем остальным (или просто людям, в которых эта сбой базы данных влияет), в которых говорится: "Эй, новые данные доступны. Теперь вы должны обновить". Другие подключенные люди делают вызов ajax и получают обновленные данные. И альт! Остальные 4 человека теперь обновили данные на своем экране!

Надеюсь, я объяснил это достаточно ясно, чтобы вы поняли! Скотт Гензельман написал хорошее введение в SignalR.

0

Считаете ли вы, что ваш кеш-код на стороне сервера хранит данные за эти 10 секунд. Загрузите его и установите его на 10 секунд. Таким образом, каждый получает такую же информацию в течение 10 секунд, а затем первый после этого 10 получает новый набор данных и затем кэширует его. Таким образом, только первый человек для обновления вызывает запрос БД, остальные получают данные до 10 секунд. Что-то вроде этого:

Cache.Insert(key, data, Nothing, DateTime.Now.AddSeconds(10), TimeSpan.Zero)

Я предполагаю, что это предполагает, что пользователи получают одинаковые данные в каждом опросе. Если они все получат уникальные наборы данных, это не сократит его для вас.

0

Я бы использовал setInterval() для запуска функции ajax каждые 10 секунд.

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;
    }
  • 0
    Вышеупомянутое решение по крайней мере минимизирует обратную передачу со стороны вашего сервера. Если вы используете формы MVC / Web, это поможет. Просто измените код в соответствии с тем, какой фреймворк вы используете. Выше с веб-формами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню