Вопрос насчет обработчика php

261
26 ноября 2016, 20:11

Созрел такой вопрос: Есть форма, пользователь вводит данные, форма передаёт на обработчик, например send.php, тот в свою очередь соединяется с mySql и вносит данные в БД. Что будет, если одновременно обратятся к обработчику допустим 5 пользователей? А если 50 или 500? Что произойдет и как избежать ошибок?

Answer 1

Во первых никто не соединяется к файлу напрямую, а соединяются к PHP-FPM или Apache MOD PHP, которые обрабатывают эти файлы в соответствии с заданными параметрами и конфигурацией.

Веб-сервер

Далее, сначала вы должны понять что такое CGI, запрос сначала уходит на веб-сервер, потом по этому стандарту уходит на модуль обработки (php).

Common Gateway Interface, "общий интерфейс шлюза" — это стандарт, который описывает, как веб-сервер должен запускать прикладные программы (скрипты), как должен передавать им параметры HTTP-запроса, как скрипты должны передавать результаты своей работы веб-серверу. Прикладную программу взаимодействующую с веб-сервером по протоколу CGI принято называть шлюзом, хотя более распространено название CGI-скрипт или CGI-программа.

Дальнейшее развитие технологии CGI, является более производительным и безопасным, снимает множество ограничений CGI-программ.

FastCGI программа работает следующим образом: скрипт единожды загружается в память в качестве демона (независимо от HTTP-сервера), а затем входит в цикл обработки запросов от HTTP-сервера. Один и тот же процесс-скрипт обрабатывает несколько различных запросов один за другим, что отличается от работы в CGI-режиме, когда на каждый запрос создается отдельный процесс, "умирающий" после окончания обработки.

По сути, все просто, веб-сервер на основе модуля создает дополнительные процессы для обработки (workerы) или подключается к какому-то демону передавая ему запросы, а тот самостоятельно выбирает количество процессов для обработки. Естественно, один процесс может обрабатывать больше одного запроса.

Для улучшения производительности, вам нужно увеличить количество одновременных процессов, количество коннектов, смотрите инструкции по настройке конфигурации вашей связки веб-сервера и модуля обработки PHP.

База данных

При соединении с базой данных, PHP создает соединение с ней и выполняет подключение, поэтому база данных тоже должна быть корректно настроена, но в целом менеджер процессов имеет такое понятие как connection polling, который содержат в себе все соединения с базой и позволяют эффективно их использовать. Хотя я думаю в вашем случае это не будет проблемой.

Answer 2

Я подозреваю, что Вы опасаетесь некорректной вставки данных. Сразу на ум приходят два сценария: падение сервера или наличие запросов, в которых сразу же используются результаты предыдущих запросов. Для обоих случаев ответ один: если у Вас в обработчике выполняется всего 1 запрос, то Вам не о чем беспокоиться - даже если произойдет падение сервера, MySQL позаботится о том, чтобы запрос либо полностью выполнился либо полностью не выполнился, если же у Вас в обработчике выполняется блок запросов, то можно воспользоваться транзакциями.

READ ALSO
php при добавлении в БД кракозябры

php при добавлении в БД кракозябры

добавляю записи в бд через ajaxПри добавлении запись все русские буквы превращаются в Ðиколай

291
Вывести имена в алфавитном порядке на каждый лист в excel

Вывести имена в алфавитном порядке на каждый лист в excel

В общем я пытаюсь сгенерировать ексель файл с именами из базы данныхУ меня получилось распечатать и создать листы с каждой буквой алфавита

202
Как вывести пять случайных строк из одной категории?

Как вывести пять случайных строк из одной категории?

Есть таблица с полями id, name, hitВ ней 100 записей

235