Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка запросов движком ASP.NET  (Прочитано 6553 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 27-04-2006 10:05 » 

Положим, имеется у пользователя в браузере много окошек одного и того же web-приложения, только разных его частей. Приложение берём ASP.NET (Framework 1.1), сервер IIS. Положим, имеем не очень быструю сеть, в которой скорость прохождения запросов не велика.

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

Из-за тормозов сети заранее нельзя сказать, в какой последовательности запросы попадут на сервер.

Так как каждая форма в каждом окошке - есть отдельный объект System.Web.UI.Page, он обрабатывается движком ASP.NET.

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

Я полагал, что движок ASP.NET (а может IIS) обрабатывает запросы в разных потоках, поэтому торможение одного из потоков не должно вешать всю систему.

Для реализации синхронизации запросов я ввёл общий объект, хранимый в сессии, к которому имеет доступ каждая форма. В этом объекте хранится множество System.Threading.ManualResetEvent объектов - по одному объекту на каждую форму. Каждая форма, завершая обработку, устанавливает событие. Имеется общая форма, задачей которой является обобщение результатов работы всех прочих форм. Эта форма использует функцию System.Threading.WaitHandle.WaitAll, в которой висит до установки всех событий, а затем генерирует результирующую форму, выдаваемую пользователю.

Но эксперименты показывают, что движок ASP.NET выполняет запросы последовательно, по мере поступления, т.е. в рамках одной сессии один запрос в один момент времени. Поэтому, если в начале результирующая форма повиснет на WaitAll, выполнение всех прочих запросов также не будет выполняться.

Вопросы такие:

1) Как на самом деле происходит обработка запросов в ASP.NET.
2) Возможна ли организация параллельной обработки форм?
3) Может быть описанная задача решается каким-нибудь другим методом?

P.S. Ограничение обсуждения: предложения по пересмотру пользовательского интерфейса и перестроению форм не рассматриваются. Меня интересует исключительно вопрос параллелизма обработки запросов, а не UI.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Serega
Гость
« Ответ #1 : 12-06-2006 08:20 » 

Паралельно обрабатывать запросы скорее всего не получится, обычно сервер держит один поток на соединение(сессию)

мне не понятно как ты себе представляешь этот кейс:
1. пользователь запрашивает главную страницу, а она у него не загружается пока он не отправит все формы ?
   так точно не получится, в этом случае твой PS может тебя похоронить )

2. пользователь получает главную страницу, отправляет все формы, главная страница перегружается
   так возможно сделать, в этом случае надо решить как узнать что пора перегрузить главную страницу, возможно перегружать её периодически или после отпарвки каждой формы
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines