Если PHP Engine уже выполняет сценарий на сервере, что произойдет с другими одновременными запросами браузера к тому же сценарию?
- Будут ли запросы стоять в очереди?
- Будут ли они проигнорированы?
- Будет ли каждый запрос иметь собственный экземпляр скрипта?
- Любая другая возможность?
Ответы:
Сервер, в зависимости от его конфигурации, обычно может обслуживать сотни запросов одновременно - при использовании Apache
MaxClients
вариант конфигурации гласит:Тот факт, что два клиента запрашивают одну и ту же страницу, не является проблемой.
Так :
Нет; кроме случаев, когда:
MaxClients
сейчас активных процессов - см. цитату из руководства Apache непосредственно перед этим.Нет: это будет означать, что только один пользователь может использовать веб-сайт одновременно; это было бы не очень хорошо, правда?
Если бы это было так, я не мог бы опубликовать этот ответ, если бы вы нажимали F5 в тот же момент, чтобы узнать, ответил ли кто-нибудь!
(Ну, SO не в PHP, но принципы те же)
Да ^^
отредактируйте после того, как вы отредактировали OP и комментарий:
Не существует такой вещи, как « экземпляр сценария »: проще говоря, то, что происходит, когда делается запрос к сценарию:
На самом деле у вас может быть два пользователя, отправляющих запрос к одному и тому же сценарию PHP (или к отдельным сценариям PHP, которые все включают один и тот же файл PHP) ; это определенно не проблема, или ни один из веб-сайтов, над которыми я когда-либо работал, не работал бы!
источник
Если два клиента одновременно обращаются к серверу, сервер, скорее всего, сможет ответить обоим клиентам почти одновременно. Здесь я определяю клиентов на уровне браузера.
Это означает, что на одном компьютере, если вы используете 2 браузера для загрузки одного и того же веб-сайта / страницы одновременно, оба должны загружаться одновременно.
однако, поскольку мы говорим о PHP, вам нужно делать особые заметки о сессиях. Если ваши страницы используют сеансы, сервер обслуживает только одну страницу за раз. Это связано с тем, что файл сеанса будет заблокирован до выхода из сценария.
Взгляните на этот пример. Два файла загружаются из одного сеанса, то есть одного и того же браузера, одного и того же пользователя.
Обратите внимание, что scriptb.php запускается только после обслуживания scripta.php. это потому, что при запуске scripta.php файл сеанса заблокирован для других сценариев, так что scripta.php может записывать в файл сеанса. Когда scripta.php завершается, файл сеанса разблокируется, и, следовательно, другие сценарии могут его использовать. Таким образом, scriptb.php будет ждать, пока файл сеанса не будет освобожден, затем он заблокирует файл сеанса и будет использовать его.
Этот процесс будет повторяться, чтобы не допустить, чтобы запись нескольких сценариев в один и тот же файл сеанса вызывала задержки. Таким образом, рекомендуется вызывать
session_write_close
(), когда вы больше не используете сеанс, особенно на веб-сайте, использующем много фреймов или AJAX.источник
Просто столкнулся с этим сам. В основном вам нужно позвонить,
session_write_close()
чтобы предотвратить блокировку одного пользователя. Убедитесь, что после звонкаsession_write_close()
вы не пытаетесь изменить какие-либо переменные сеанса. После того, как вы его вызовете, с этого момента обрабатывайте сеансы как доступные только для чтения.источник
Если вы не используете очень нестандартную настройку, ваш веб-сервер (Apache, IIS, nginx и т. Д.) Будет иметь несколько процессов, которые запускают PHP отдельно для каждого запроса, поступающего на сервер. Одновременные заявки будут обслуживаться одновременно.
источник