@nyqpblcTuk

Как работает PHP, Браузер — PHP?

Как работает php?
Поясняю что мне хочется узнать, я всегда думал что это происходит примерно так:
зашло на сайт 1000 человек, на сервере для каждого юзера выполнился скрипт сразу. (Без очередей, и ожидание, пока у одного загрузится, потом у второго, третьего и так до 1000, Последний уже седой сидит и бабку толкает в бок, что вот-вот загрузится.)

Если это так, то мне не ясна работа Телеграм бота, который я пытаюсь написать.
1 часть бота - это говорилка.
2 часть бота - это отправку CURL на сайт и парсинг с него данных и отправка обратно в виде скриншота.

Сначала я выполнял вызов CURL из тела бота, что меня удивило, что клиенты стоят в очереди, пока у одного загрузится, потом у второго, так я подумал, проблема не в PHP, а в опросе сервера со стороны Телеграм.

Изменил алгоритм, вызываю, короткий curl с GET запросом в сторонний мой файл, а из него уже делаю тот самый запрос, который был изначально, тем самым, "убиваю очередь", на каждый запрос идет пару мл.
Хотя сразу скажу запрос долгий примерно 40 сек. (и это вина стороннего сайта, так он и работает без моих запросов)

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

И тут начинается проблема, как я понял запрос идет на один файл, и эти запросы перекликаются, и они то постят одну и ту же картинку, то не доходят до отправки скрина. Хотя в имени сохранения картинки, я ставлю время с начало люнекс, чат_id, и еще личные цыфры отправляемые в GET запросе, т.е. одинаковых имен в природе не может получиться.
Хотя CURL это же имитация браузера, и по идее разные запросы.

Следовательно, PHP обрабатывает запросы не в разных потоках.

Тогда, как со стороны браузера 1000 клиентов не ждут друг друга.
  • Вопрос задан
  • 311 просмотров
Пригласить эксперта
Ответы на вопрос 2
AgentSmith72
@AgentSmith72
JS - это моё хобби
По-поводу процессов в PHP-FPM есть вводное видео.
Рекомендую ознакомится.

В вашем случае, и везде где нужно сохранять порядок, используется очередь
Пример очереди

Суть очереди в том, что вы используете базу данных, для сохранения каждого запроса, а воркер ищет добавленные в очередь (записи в бд) задачи и выполняет их по принципу FIFO.
Ответ написан
Комментировать
@rPman
За многозадачность отвечает тот кто собственно запускает php, например веб сервер, в его настройках указывается, сколько потоков должно быть запущено одновременно, при превышении это количества клиенты ждут.

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

Так что от тебя зависит
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы