Использование SqlCacheDependency для получения обновлений в реальном времени? - ASP.NET - PullRequest
1 голос
/ 09 января 2010

Я хотел бы отображать обновления в реальном времени на веб-странице (на основе поля состояния в таблице базы данных, которое изменяется внешним процессом). Основываясь на моих исследованиях, есть несколько способов сделать это.

  • Long Polling (Comet) - это кажется сложным для реализации
  • Регулярный опрос - я могу использовать метод AJAX, который вызывает попадание в базу данных каждые 5 секунд, чтобы получить текущий статус. Но я боюсь, что это будет иметь проблемы с производительностью.

Затем я прочитал об использовании SqlCacheDependency - по сути, кеш становится недействительным на основании поля в таблице. Я предполагаю, что могу использовать событие, инициированное, когда кэш недействителен, чтобы показать новое обновление пользователю?

Какое простое решение без проблем с производительностью?

Ответы [ 2 ]

1 голос
/ 13 января 2010

Вместо того, чтобы опрашивать базу данных, более масштабируемым и производительным подходом было бы опросить наличие файла на вашем веб-сервере, что-то вроде облегченного файла js.Содержимое файла не важно, но чтобы дать вам представление, у вас может быть какой-то объект JSON, который более подробно описывает результат процесса.

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

Вот как это может работать.

Пользователи нажимают кнопку, которая отправляет на сервер

Сервер запускает процесс и возвращает идентификатор, например, C3201620-E622-4fe2-9F3A-E02FFA613F59

Веб-интерфейс пользователя, а затем перидодически опрашиваетПри существовании C3201620-E622-4fe2-9F3A-E02FFA613F59.js javascript будет обрабатывать ошибку 404 и будет повторять попытки до получения 200

Надеюсь, это даст вам некоторые идеи.

Пример кода для обработки 404-х в jQuery

$.ajax({
        url: '/CheckForStatusChange/C3201620-E622-4fe2-9F3A-E02FFA613F59.json',
        type: "GET",
        success: function(result) {

        },
        error: function(request, status, error) {
        //handle error here and setTimeOut                 

        }); 
0 голосов
/ 01 апреля 2010

У вас есть 2 вопроса:

  1. Получение данных для нажатия
  2. Передача данных клиентам

Пункт № 1 прост, если у вас достаточно эффективный запрос, и вы не запрашиваете его у каждого пользователя; просто запросите, получите данные и отправьте их. Вы можете использовать опцию SqlDependency или просто опрашивать ее; это зависит от того, насколько тяжелы ваши данные.

Пункт № 2 немного сложнее, потому что вам нужно либо постоянно попадать на сервер, либо использовать сервер комет. Мы написали очень масштабируемый комет-сервер .NET, WebSync , на Frozen Mountain, который мог бы соответствовать всем требованиям. По сути, у вас есть отдельный процесс, который управляет публикацией, и WebSync будет обрабатывать передачу данных вашим клиентам.

...