Как обновить страницу / (объект на странице) при изменении базы данных в MVC 3 с помощью бритвенного движка? - PullRequest
0 голосов
/ 16 марта 2012

Я смотрю вокруг, некоторые говорят, что мне нужно сделать что-то вроде таймера пула.в окружении Аякса.это звучит хорошо, но я не хочу делать новый запрос каждые 1-5 секунд, просто чтобы быть в курсе последних обновленных данных на странице.поэтому я слышал кое-что о signalR, но это звучит слишком сложно для реализации, я думаю, в основном потому, что это неизвестная территория для меня.Я также читал кое-что о том, что silverlight может помочь в этом деле.

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

Я использую MVC 3 с движком Razor, базой данных mssql и IIS express 7.5.

Мои параметры вне этой среды:очень ограниченный.

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

Заранее благодарен за любые ответы.

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

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Если у вас есть диаграмма, заполненная значениями, и вы хотите, чтобы она обновлялась в любой момент, не будет ли это очень запутанным для пользователей, если данные меняются каждую секунду?Вызов Javascript, который обновляет некоторое значение Div каждые x секунд, например setTimeout("Refresh()",2000);

. Вы можете сделать ajax-вызов в методе Refresh, который вернет частичное представление для вашего графика.

1 голос
/ 16 марта 2012

Как вы уже определили, вы можете периодически опрашивать, используя AJAX, чтобы узнать, нужно ли вам обновить. Если это не звучит хорошо, вы можете попробовать подход COMET, который включает в себя открытие запроса, который и клиент, и сервер остаются открытыми, пока на сервере не появится сообщение. В это время он отправит сообщение с любыми инструкциями, которые вы пожелаете (например, перезагрузите эту страницу) и завершит соединение, где клиентский скрипт затем что-то сделает с этим сообщением. Практическим примером этого является то, как Facebook обрабатывает уведомления. В результате ваш сервер получает меньше трафика, а пользователи получают волшебный «мгновенный» ответ от клиента. С другой стороны, этот подход требует правильного построения и настройки на сервере и в вашем приложении, так как поддержание большого количества открытых соединений может создать проблемы.

Существуют некоторые модули ASP.NET для реализации решения COMET (и Signalr звучит как одно из таких решений), но мне интересно, почему опция опроса настолько плоха, если вы используете ее только на Интранет. Вам не обязательно опрашивать в нескольких независимых областях вашего клиента; у вас мог бы быть один уведомитель (это все в JS, обратите внимание), который получает подписки от других компонентов, которые предоставляют информацию о том, что они хотят, чтобы вы проверяли. Затем выполните опрос AJAX для какого-либо действия MVC с сообщением, содержащим все соответствующие подписки. Я не представляю, что это большой сетевой бастер, так как у меня есть приложение, которое делает это в довольно большом масштабе.

На стороне сервера ваше действие будет анализировать это сообщение в заданиях, проверять каждое из них по запросу и отправлять ответное сообщение, если есть что сделать. Затем ваш клиентский уведомитель получает сообщение и отправляет результаты всем подписчикам, если есть что сделать (тривиальный пример: обновить страницу или, что более целесообразно, обновить раздел страницы, в котором есть изменения ... вы можете использовать JavaScript, предпочтительно через jQuery - для замены содержимого элемента на HTML, полученный из действия MVC для изменения содержимого).

Это может показаться сложным, но это не совсем так, особенно по сравнению с управлением решением COMET, и вы можете сделать это с помощью готовой технологии.

Упомянутая вами технология Silverlight звучит как использование дуплексного сервисного контракта WCF с использованием двойной HTTP-привязки , которая позволяет серверу инициировать запросы к клиенту. Это, безусловно, вариант, поскольку у вас может быть приложение для уведомлений Silverlight, подобное тому, что я упоминал ранее, сидеть на вашей странице, принимать подписчиков и получать push-сообщения с сервера. У меня не было возможности реализовать дуплексный сервис в реальном приложении, поэтому я не знаю, насколько это практично в производственной среде.

...