Как сервер обрабатывает запросы POST?
Пытаюсь понять как работает $_POST.
Меня интересует взаимодействие сервера с несколькими клиентами одновременно и получение от них данных из формы/форм.
Допустим, 3 человека одновременно отправили заполненную форму на сайте. Скрипт обработчик, понятно, один.
Как эти данные обрабатывает сервер? Ставит в очередь? Или в несколько потоков?
Заранее спасибо!
Ответы (2 шт):
В общем случае для каждого запроса запустится свой отдельный экземпляр вашего PHP скрипта.
Если это будут одновременные запросы, то одновременно запустится три экземпляра.
Тут уже у вас полная свобода действий. Хотите обрабатывать запросы параллельно? Нет проблем, всё уже так работает. Хотите, чтобы в один момент времени работал только один запрос? Тоже нет проблем, используйте или транзакции в БД, или семафоры, или хоть flock подключите. Десяток вариантов решить эту задачу.
В общем все зависит от сервера. Под сервером надо понимать процесс который работает на физическом сервере и предоставляет, некий интерфейс (порт, сокет) для WEB это два порта по умолчанию 80 и 443, http и https соответственно. Примером таких серверов будут служить следующие пакеты:
- nginx
- apache
- php -S
Что бы глубже понимать что такое $_POST в php, надо посмотреть на саму цепочку, как доходит запрос до сервера? А схематично это выглядит так:
браузер -> http -> (nginx -> php)
В php можно получить прямой доступ к потоку ввода и вывода https://www.php.net/manual/ru/wrappers.php.php но все же нас интересует от куда post? Запрос http это ничто иное как файл который имеет заголовки и тело запроса
Content-type: application/json
{"test":test}
как пример такого запроса. Когда он отправляется методом POST, то этот файлик записывается в stdin в порт сервера, после чего сервер (nginx) формирует запрос к интерпретатору php с использованием переменных окружения https://www.php.net/manual/ru/reserved.variables.server.php. После чего уже сам интерпретатор парсит строку относительно content-type и формирует массив $_POST, который суперглобален, и доступен в любой части скрипта.
Многие сервера обрабатывают запросы асинхронно, простыми словами запускают на каждый запрос новый instance процесс для обработки запроса, после отработки процесс завершается. POST для каждого формируется свой.