Запросы API с PHP параллельно - PullRequest
0 голосов
/ 09 января 2012

Я запрашиваю API с помощью cURL (GET), и API дает мне только 25 результатов на вызов (это жесткий предел, и я ничего не могу с этим поделать, так как он не мой).

Результаты выглядят так:

<response v="2">
    <query>my nifty query</query>
    <location>new york, ny</location>
    <totalresults>920</totalresults>
    <start>1</start>
    <end>25</end>
    <pageNumber>0</pageNumber>
    <results>
        <result></result>
        <result></result>
        ...
    </results>
</response>

Суммарные результаты (которые отображаются в возвращенном xml [выше]) могут содержать до 1000 результатов, и, как и в большинстве случаев, у меня обычно 1000 результатов на запрос, поэтому мне приходится вызывать API 40 раз ( т.е. 25 результатов на вызов × 40 вызовов = 1000 результатов ). При каждом вызове я изменяю параметр API start и увеличиваю его на 25 (т. Е. 0, 25, 50, ..., 975).

Весь этот процесс занимает около 8 секунд, поскольку в настоящее время я вызываю API синхронно (я использую curl_exec() для выполнения команды GET, один за другим в цикле for). Есть ли эффективный и более быстрый способ параллельного вызова API и получения этих результатов быстрее? Спасибо.

1 Ответ

5 голосов
/ 09 января 2012

Вы можете выполнить несколько a-синхронных вызовов cURL с помощью curl_multi_exec(). Это позволит вам выполнять несколько вызовов одновременно.

Просто имейте в виду, что при многократных запросах к одному и тому же серверу существует верхний предел количества одновременных запросов в зависимости от эффективности. Я уверен, что помню, как читал, что после большого количества исследований или исследований Facebook пришел к выводу, что этот лимит составлял от 3 до 4 одновременных запросов, но я не могу найти ссылку, поэтому я мог ее себе представить. Это будет зависеть от сервера и клиента, которые вы используете, так что на самом деле я бы сказал, что вам просто придется пососать его и посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...