Intereting Posts
Какова наилучшая практика создания пользовательской вспомогательной функции в php Laravel 5? Просмотр кэширования в Laravel 4 Потерянное соединение с сервером MySQL при «считывании исходного пакета связи», системная ошибка: 0 при подключении к Mysql в cpanel Как я могу получить имя скрипта, вызывающего функцию? Могу ли я перенести PHP-код с моего сайта на C, чтобы создать приложение для iOS? Удаление X-Powered-By данные не проходят через URL foreach каждые 3 положить внутри новой ul Автоматически удалять пользователей WordPress в зависимости от времени с момента регистрации? Рекурсивное PHP-регулярное выражение Doctrine не работает, если я явно не вызываю AnnotationDriver :: getAllClassNames Как отсортировать XML-файл с помощью DOM Отключить клавишу ввода в форме с jquery-powered Как я могу исправить ошибку разрешения при вызове session_start ()? предотвратить форматирование от POST до тех пор, пока код javascript не будет удовлетворен

Как обрабатывать запросы API с помощью PHP

Мы планируем использовать SEMrush API, который позволяет получить доступ к данным SEO, относящимся к доменным именам и ключевым словам поиска. Согласно их Условиям использования , они ограничивают их использование, чтобы избежать убийства своих серверов:

Вы не можете выполнять более 10 запросов в секунду, а не более двух одновременных запросов.

Мы собираемся создать простой инструмент на PHP, который объединяет данные на основе имени домена и ищет основы того, как выполнить это требование. Мы планируем сотни / тысячи потенциальных одновременных пользователей.

Может быть, кто-то может предоставить некоторый псевдо-код в PHP, который позволил бы нам это сделать – или это действительно так же просто, как заставить фактическую функцию запроса API спать в течение 1 секунды между каждой командой? У меня нет большого опыта работы с API-интерфейсами и большим количеством одновременных пользователей, поэтому любая помощь приветствуется.

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

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

Мое первое предложение было бы попробовать что-то вроде gearman , который является отличным менеджером заданий и имеет расширение на PHP, чтобы помочь вам взаимодействовать с библиотекой.

Другое предложение – взглянуть на системы очередей, такие как amqp или zmq , некоторые из которых также имеют расширения в PHP .

Итак, вот пример сценария для вас …

У вас есть PHP-скрипт, который принимает эти запросы и передает их в диспетчер заданий или в очередь на сокет. Менеджер заданий или очередь будут хранить запрос и распределять его отдельным работникам таким образом, чтобы их можно было централизовать и контролировать, чтобы наложить эти ограничения. Есть несколько примеров из ссылок, которые я вам дал, которые могут помочь вам добраться туда. Тем не менее, делать это чисто на PHP без помощи этих инструментов окажется довольно сложным и может закончиться в некотором очень красновато-баггическом поведении, если не тщательно обработать и рассмотреть.