Медленный серверный скрипт делает IE зависшим - PullRequest
1 голос
/ 29 июля 2010

Я работаю над веб-приложением php, которое включает вызовы сторонних веб-сервисов. Недавно я столкнулся с проблемами, потому что некоторые из веб-сервисов работают медленно и / или время ожидания истекло. (Когда это происходит, служба выдает ошибку через 5-6 минут, которая обрабатывается веб-приложением)

Однако проблема возникает в том, что при ожидании результата / тайм-аута все другие подключения к веб-приложению в браузере (другие окна / вкладки в IE) блокируются. Кажется, это проблема браузера, поскольку при открытии дополнительного окна в другом браузере (например, Chrome) веб-приложение обслуживает страницы без задержки.

Я рассмотрел вопрос об асинхронной установке вызова веб-службы (отдельный процесс server.side или вызов ajax в браузере), но в то же время я хотел бы знать, почему IE помещает все соединения в веб-приложение в ожидании одной страницы? Может ли быть так, что пользовательский заголовок или другой тривиальный трюк разметки скажет IE продолжить подключение к другим страницам на том же хосте?

1 Ответ

1 голос
/ 29 июля 2010

возникает проблема, что при ожидании результата / тайм-аута все остальные подключения к веб-приложению в браузере

То, что вы видите, - это нормальное и ожидаемое поведение, , если вы используете сеансы . Стандартный обработчик сеанса на основе файла устанавливает блокировку для файла сеанса, когда владелец сеанса делает запрос. Как только запрос завершается, блокировка снимается. Между тем, если пользователь делает какие-либо дальнейшие запросы, эти запросы будут ожидать снятия блокировки, прежде чем они смогут продолжить. Такое поведение предотвращает состояние гонки, которое в противном случае могло бы привести к потере данных сеанса.

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

Я рассмотрел асинхронную установку вызова веб-службы

Если веб-сервис ненадежен, это хорошая идея. Вы должны рассмотреть Gearman , систему работы / очереди сообщений. Он имеет всестороннюю поддержку PHP как расширение PECL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...