2017-04-09 7 views
1

Ich benutze das Amazon API-Produkt, das eine Grenze von einer Anfrage pro Sekunde mit der gleichen IP-Adresse hat. Kann ich php curl definieren, dass jede Anfrage in einer Entfernung von 1 Sekunde gemacht wird? (Global)PHP, 1 Curl pro Sekunde

+0

Ist dies eine Befehlszeilenanwendung oder ein Webserver? Gibt es mehrere Arbeiter/Prozesse? –

Antwort

1

Sie sollten mit sleep(1); Funktion zu machen Verzögerung in einer Schleife

+0

! Ich muss es global einstellen. Wenn ich 10 Besucher habe, sollten Anrufe nicht überlappen, weil Amazon die IP – BOES

+2

no no! Verwenden Sie einen Cache oder eine Datenbank zum Speichern der letzten Anforderungszeit für die Überprüfung –

+0

! Es ist nicht trivial, wir sollten die Warteschlange verwalten und schlafen. Sicher gibt es eine Einstellung? – BOES

0

Wenn Sie eine globale Lösung benötigen, können Sie Warteschlangen verwenden (wie Redis etc.). Ihr Skript, das Besucher anspricht, schreibt einfach eine Anfrage in diese Warteschlange. Ein anderer Dienst liest diese Warteschlange einmal pro Sekunde und sendet eine cURL-Anfrage.

Auf dieselbe Weise können Sie eine Datenbank als Warteschlange verwenden: Ein Dienst stellt Datensätze in die Datenbank und andere liest eine Datenbank einmal pro Sekunde für einen nächsten Datensatz und führt eine cURL-Anforderung aus.

0

Speichern Sie alle Anfragen von Benutzern in einer Warteschlange. Sie können db (mysql etc) oder im Speichercache (redis) verwenden. Dann bearbeiten Sie die Anfrage einzeln mit 1 Sekunde Verzögerung