Добрый день!
Я нашел интересное поведение как для стека LAMP, так и для ASP.NET.
Сценарий:
За 2-3 минуты выполняется выполнение страницы (создание HttpWebRequest для ASP.NET и завивка для PHP). Хотя эта страница обрабатывается, все остальные запросы к этому виртуальному хосту из одного браузера не обрабатываются (даже если я использую разные браузеры с одной машины). Я использую две страницы, написанные на PHP и C #.
Я тестировал Apache + PHP в режимах mod_php и fast_cgi на Windows и Debian. Для ASP.NET я использую IIS6 (с выделенным пулом приложений для этого сайта и с пулом приложений по умолчанию) и IIS7 в интегрированном режиме.
Я знаю, что лучше использовать асинхронные вызовы для таких вещей, но мне просто интересно, почему одна страница блокирует весь сайт, а не только поток, обрабатывающий запрос?
Заранее спасибо!
Кажется, вы открываете стандартную сессию php, которая открыта до конца запроса. Это означает, что файл сеанса заблокирован. Используйте session_write_close () как можно скорее, если вам уже не нужны данные сеанса.
Я не думаю, что это блокирует сайт; Я бы заподозрил, что открытое соединение блокирует выполнение клиентом большего количества запросов. Вы доказали, что другие машины не могут использовать сайт, пока выполняется ваш долговременный запрос?
Если вы видите только один запрос, поступающий в приложение, единственное, что я могу придумать, это глобальная блокировка где-то в конвейере.
Блокировка может быть явной (вы написали оператор блокировки) или неявным. Если вы видите несколько запросов – это может быть из-за исчерпания пула потоков.
Имейте в виду, что помимо ограничения количества потоков, используемых для обработки входящих веб-запросов, существует отдельная кепка количества одновременных исходящих веб-запросов через HttpWebRequest, и по умолчанию этот лимит очень низок – если я правильно помню 2 за каждый ЦПУ. Я не помню имя параметра в web.config, но попытаюсь найти его.
В любом случае код публикации даст нам больше шансов помочь вам
Я определенно заметил это поведение при отладке приложений ASP.NET, но я всегда считал, что это проблема с отладочной конфигурацией. Вы строите все в режиме выпуска и отключите отладку в своем web.config?
Приложения ASP.NET имеют глобальную блокировку сеанса.
Используйте EnableSessionState="ReadOnly"
для WebForms или [SessionState(SessionStateBehavior.ReadOnly)]
для MVC. Это предотвратит блокировку (конечно, вы не можете ничего записать в сеансе только для чтения).
Я просто обнаружил, почему все сайты ASP.Net медленны, и я пытаюсь выяснить, что с этим делать