Мы планируем использовать SEMrush API, который позволяет получить доступ к данным SEO, относящимся к доменным именам и ключевым словам поиска. Согласно их Условиям использования , они ограничивают их использование, чтобы избежать убийства своих серверов:
Вы не можете выполнять более 10 запросов в секунду, а не более двух одновременных запросов.
- Как организовать классы Luracast Restler для создания связанных конечных точек маршрута?
- проверка заголовка Авторизация в интерфейсе API-интерфейса Restler
- Предел ставки. API Twitter
- Webservice / API, чтобы захватить скриншот другого сайта? (известные решения слишком медленные)
- Получение ответа API через curl_exec curl () вместо обычного файла обратного вызова
Мы собираемся создать простой инструмент на PHP, который объединяет данные на основе имени домена и ищет основы того, как выполнить это требование. Мы планируем сотни / тысячи потенциальных одновременных пользователей.
Может быть, кто-то может предоставить некоторый псевдо-код в PHP, который позволил бы нам это сделать – или это действительно так же просто, как заставить фактическую функцию запроса API спать в течение 1 секунды между каждой командой? У меня нет большого опыта работы с API-интерфейсами и большим количеством одновременных пользователей, поэтому любая помощь приветствуется.
PHP действительно не лучший язык для параллельного программирования. Тем не менее, есть некоторые сторонние решения, которые вы можете использовать на стороне PHP, которые могут помочь вам достичь ваших целей.
Вам нужен менеджер заданий или система очередей, которые могут обрабатывать фактические запросы для вас. Поскольку это вспомогательный инструмент ( по крайней мере, это то, что я собрал из вашего вопроса ), он не требует, чтобы PHP обрабатывал фактический контроль над самими заданиями, но просто имел некоторый контрольный процесс, планируя эти отдельные задания и передавая их на ваш PHP-скрипты, чтобы вы могли эффективно налагать эти ограничения.
Мое первое предложение было бы попробовать что-то вроде gearman , который является отличным менеджером заданий и имеет расширение на PHP, чтобы помочь вам взаимодействовать с библиотекой.
Другое предложение – взглянуть на системы очередей, такие как amqp или zmq , некоторые из которых также имеют расширения в PHP .
Итак, вот пример сценария для вас …
У вас есть PHP-скрипт, который принимает эти запросы и передает их в диспетчер заданий или в очередь на сокет. Менеджер заданий или очередь будут хранить запрос и распределять его отдельным работникам таким образом, чтобы их можно было централизовать и контролировать, чтобы наложить эти ограничения. Есть несколько примеров из ссылок, которые я вам дал, которые могут помочь вам добраться туда. Тем не менее, делать это чисто на PHP без помощи этих инструментов окажется довольно сложным и может закончиться в некотором очень красновато-баггическом поведении, если не тщательно обработать и рассмотреть.