Можно ли использовать AsyncController в ASP.NET MVC для обслуживания большого количества одновременных зависающих запросов (длинный опрос)? - PullRequest
5 голосов
/ 13 февраля 2011

Фреймворки, такие как Node.js, Tornado и Twisted, позволяют разработчикам создавать серверные приложения, поддерживающие большое количество одновременных запросов на зависание (10 000+). Насколько я понимаю, все они достигают этого, не создавая потоков для обслуживания каждого зависшего запроса.

Можно ли использовать AsyncController для обслуживания большого количества неактивных одновременных запросов?

Если это так, существуют ли достаточно большие веб-сайты ASP.NET MVC, использующие этот подход для создания приложений с длительным опросом?

Ответы [ 2 ]

6 голосов
/ 13 февраля 2011

AsyncController полезен (по сравнению с обычным контроллером) в следующей ситуации:

У вас есть долго выполняемая задача, и эта задача обычно достигается с помощью другого уровня (веб-службы, базы данных, ...) с помощью Порты завершения ввода / вывода . Таким образом, запрос начинается в рабочем потоке, затем вы вызываете метод BeginXXX, который открывает IOCP (если он поддерживает его, если не бесполезен, так как он просто рисует другой рабочий поток), и рабочий поток немедленно возвращается пул потоков. Во время выполнения длинной операции никакие рабочие потоки не используются на сервере. Как только он завершает это, он сигнализирует IOCP, асинхронный контроллер извлекает другой поток из пула, чтобы просто завершить запрос и вернуть результаты в представление. Здесь следует отметить несколько вещей: тот факт, что вы использовали асинхронный контроллер вместо обычного контроллера, не имеет абсолютно никакого значения для клиента: ему все равно придется ждать столько же времени для завершения запроса, не создается ложное впечатление, что асинхронный контроллер ускорит медленную работу. Просто рабочие потоки будут монополизированы за меньшее время и, следовательно, могут ускорить выполнение других запросов.

Подводя итог: для быстро выполняющихся запросов асинхронные контроллеры не принесут вам никакой пользы по сравнению с обычными контроллерами. Для медленных запросов они могут, но это будет зависеть от характера длительной операции и от того, связан ли он с ЦП или с вводом / выводом. Для задач, связанных с процессором, асинхронные контроллеры также не являются более полезными. Но во всех случаях вы должны выполнять обширное нагрузочное тестирование своего приложения.

Вот очень хорошая статья о MSDN , которая объясняет асинхронные запросы в ASP.NET.

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

3 голосов
/ 13 апреля 2011

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

Вы можете использовать пример при развертывании AppHarbor Я настроил на основе источника из проекта BitBucket.

Кроме того, более подробную информацию можно получить из моего сообщения в блоге, объясняющего проект .

...