Веб-приложение ASP.NET MVC в реальном времени - PullRequest
13 голосов
/ 02 марта 2011

Мне нужно добавить элемент "реального времени" в мое веб-приложение. По сути, мне нужно обнаруживать «изменения», которые хранятся в таблице SQL Server, и обновлять различные части пользовательского интерфейса при возникновении изменений.

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

Есть ли какая-нибудь умная альтернатива, которая позволяет избежать опроса?

Редактировать

В целях полноты, я обновляю это, чтобы упомянуть решение, которое мы в конечном итоге выбрали - SignalR . Это ОС и исходит от Microsoft. Его популярность возросла, и я могу от всей души порекомендовать это или даже WebSync, который мы также рассмотрели.

Ответы [ 5 ]

10 голосов
/ 02 марта 2011

Проверьте WebSync , комет-сервер, разработанный для ASP.NET/IIS.

.

В частности, я бы использовал класс SQL Dependency , а при обнаружении изменения используйте RequestHandler.Publish ("/ channel", data); для отправить информацию соответствующим прослушивающим клиентам.

Должно работать очень хорошо.

5 голосов
/ 02 марта 2011

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

У нас было похожее требование: иметь очень быстрое время отклика в одном из наших веб-приложений реального времени, обслуживая около 400-500 клиентов на каждый веб-сервер. Сервер должен будет уведомить клиентов почти в течение 0,1 секунды (телефония и VoIP).

В итоге мы реализовали Async Handler . При каждом запросе опроса мы переводим запрос в спящий режим на 5 секунд, ожидая, пока импульсный сигнал семафора ответит клиенту. Если 5 секунд истекли, мы отвечаем «нет события», и клиент отправит запрос снова (немедленно). Это привело к очень быстрому времени отклика, и у нас никогда не было проблем с до 500 клиентами на машину ... не знаю, сколько еще мы можем добавить, прежде чем запросы на опрос могут создать проблему.

5 голосов
/ 02 марта 2011

взято непосредственно по ссылке, на которую ссылается Якуб (т.е.):

Обратный AJAX с IIS / ASP.NET

PokeIn на codeplex предоставляет расширенные функциональные возможности JSON для обеспечения доступности объектов на стороне сервера на стороне клиента. Проще говоря, это библиотека Reverse Ajax, которая позволяет легко вызывать функции JavaScript из C # / VB.NET и вызывать функции C # / VB.NET из JavaScript. Он имеет множество функций, таких как упорядочение событий, управление ресурсами, обработка исключений, маршалинг, контроль загрузки Ajax, моно-совместимость, интеграция WCF и .NET Remoting и масштабируемый серверный push. Для этой библиотеки существует опция бесплатной лицензии сообщества, и эта опция лицензирования является довольно экономичной по сравнению с другими.

Я на самом деле использовал это, и выпуск сообщества довольно особенный. Стоит посмотреть, как этот тип технологий начнет доминировать в ландшафте в ближайшие месяцы / годы. Сайт codeplex поставляется с примерами mvc asp.net.

1 голос
/ 02 марта 2011

В зависимости от ограничений вашего приложения, вы можете использовать Silverlight для подключения. Вам не нужно иметь никакого пользовательского интерфейса для Silverlight, но вы можете использовать сокеты с соединением, которое принимает запросы данных на стороне сервера.

1 голос
/ 02 марта 2011

взгляните на эту статью

Я где-то читал (не помню, где), что с помощью этой функции WCF процесс хоста обрабатывает запросы так, чтобы не использовать заблокированные потоки.

...