2017-04-07 2 views
0

Je suis actuellement en train de construire une API à Laravel (PHP) pour récupérer les prix de différents hôtes. Il y a actuellement 756 'pièces' différentes avec différents hôtes pour récupérer les prix.Meilleure façon de planifier une grande quantité de tâches en PHP

Par exemple: Coin X

Hôte 1 Hôte 2 hôte 3 - jusqu'à 30 hôtes

Coin Y

hôte 1 hôte 4 hôte 5 - jusqu'à 30 hôtes etc.

Le problème ici est que, idéalement, chaque pièce devrait être mise à jour toutes les 10 secondes. Cela signifie que chaque pièce doit appeler tous ses hôtes, calculer le prix moyen, enregistrer le prix dans la base de données et enfin enregistrer un fichier JSON avec l'historique total de la pièce. (Peut-être serait-il préférable d'enregistrer le prix actuel en JSON pour gagner du temps)

J'ai essayé de mettre tout cela dans une classe pour chaque hôte, mais le temps d'exécution est beaucoup trop long (environ 5 minutes). minutes en utilisant CURL).

Je pense à créer une tâche (travail cron) pour chaque pièce. De cette façon, la mise à jour des pièces peut être synchronisée (plusieurs pièces à la fois). Mais je ne suis pas sûr que ce serait le meilleur moyen.

Quelle approche recommanderiez-vous? Tous les conseils sont les bienvenus.

Répondre

0

Votre temps de mise à jour global sera limité par le nombre de pièces x la vitesse de mise à jour de chaque hôte. Vous pourriez vouloir chronométrer combien de temps une (ou une moyenne) requête prend (avec un script) pour voir combien de temps le tout prendra. Comme, si cela prend trop de temps, faites-les l'un après l'autre, vous devrez le configurer pour faire des demandes parallèles (en même temps).

+0

Salut Hayden, Merci pour votre réponse. Le temps moyen pour une demande est d'env. 500 - 700 ms. Si je comprends bien, suggérez-vous de mettre toutes les demandes dans un CURL_MULTI? Je n'ai pas encore testé cela, mais un bon appel. – Thjeu

+0

Je n'ai pas eu beaucoup à faire avec CURL (seulement des requêtes simples simples), sans googling je n'aurais aucune idée si elle peut faire des demandes simultanées en même temps. Mais tout ce que vous pouvez faire cela vaudra la peine d'essayer. Vous aurez probablement toujours besoin d'un travail cron pour appeler le script php à intervalles, si vous pouvez faire plusieurs appels dans une fonction ou faire plusieurs appels d'une fonction. –

+0

Wow, je viens de lancer tout le processus avec curl_multi et réduit le temps à 12 secondes. C'est bien. Je peux travailler plus loin d'ici. Merci beaucoup Hayden! – Thjeu