LINUX.ORG.RU

PHP - взаимодействие по API и многопоточность

 , , ,


0

1

Доброго времени суток. Возник такой вопрос - есть задание написать скрипт, который должен залить файл на другой и сайт и получить ответ, общаясь через его API(например, сервис распознавания капч). В зависимости от полученного ответа, скрипт должен выводить определенный текст. В задаче оговорено условие, что решение должно быть серверное и многопоточное. Общий алгоритм следующий: при заливке изображения, генерируется страница, на которой выдается текст вида ОК|ID, где ок - статус, а id - идентификатор запроса, с помощью которого потом можно найти запрос. Далее, можно сделать POST-запрос на другую страницу, указав id запроса и получить текст капчи. На практике все немного сложнее, т.к. есть обработка ошибок, различные параметры и секретный ключ, без которого распознавание попросту не пройдет, но на суть вопроса это не влияет.

Как бы я сделал это в принципе: html-страница, на которой есть форма для загрузки файла. по сабмиту, файл передается с помощью ajax на сайт и возвращается текст, который вернула страница. этот текст, парсится, оттуда берем id и делаем второй запрос, в результате которого получаем распознанный текст.

Но решение должно быть серверным и многопоточным. Если не сложно, подскажите нубу, в каком направлении копать

Написано, что скрипт должен выдерживать нагрузку, допустим, в тысячу человек. Насколько я понимаю, когда человек вызывает php-скрипт, то создается соединение и интерпретатор начинает генерировать на основании скрипта страницу. Если несколько человек одновременно запрашивают страницу, то создается несколько соединений. У каждого юзера своя сессия, свои параметры. Чем же тогда является одновременное исполнение php-скрипта для нескольких пользователей как не многозадачностью?

Помогите пожалуйста разобрать кашу в голове. В общем, пните в нужном направлении. Заранее спасибо

И. А. Крылов, «PHP и многопоточность»

slyjoeh ★★ ()

Костыли-костылики

Простейший способ - однопоточный скрипт на php + xargs.

xtraeft ★★☆☆ ()
Ответ на: комментарий от slyjoeh

Пых-пыха к старости слаба в многопоточность стала

Но от коллег по цеху она слыхала

Что это зло еще не так большой руки:

....

anonymous ()

Но решение должно быть серверным и многопоточным

В PHP можно делать реально качественные многопоточные приложения. Но проще и традиционнее делать многопоточность средствами Web-сервера.

Чем же тогда является одновременное исполнение php-скрипта для нескольких пользователей как не многозадачностью?

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

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

сколько тысяч потоков сможет держать PHP? какую технологию ты имеешь в виду?

stevejobs ★★★☆☆ ()
Ответ на: комментарий от stevejobs

сколько тысяч потоков сможет держать PHP?

PHP-скрипт работает в одном потоке. Одновременное выполнение нескольких задач обеспечивает связка, например, nginx+php-fpm. Максимальная нагрузка, с которой я сталкивался на практике — около 100 тыс. пользователей онлайн. Для обеспечения такого онлайна хватило php-fpm-лимита в 35 серверов по 50 потоков в каждом (pm.max_spare_servers = 35 и pm.max_children = 50) на фронтенде и 70 серверов по 1000 детей в бэкенде. Т.е. выходит, что я работал до 70 тыс. одновременных потоков. Это был явно не предел, сайт справлялся без особого напряжения.

KRoN73 ★★★★★ ()

Спасибо за ответы! У меня тогда остался вопрос как сделать именно серверное решение этой вещи:

Как бы я сделал это в принципе: html-страница, на которой есть форма для загрузки файла. по сабмиту, файл передается с помощью ajax на сайт и возвращается текст, который вернула страница. этот текст, парсится, оттуда берем id и делаем второй запрос, в результате которого получаем распознанный текст.

Как сделать именно серверное решение а не просто передавать данные через ajax?

gwyllum ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.