Vous n'êtes pas identifié(e).
Bonjour la communauté,
Je viens vers vous ce jour avec une question à laquelle plusieurs d'entre vous ont surement déjà été confrontés :
Pour un projet sur lequel je travail en PHP, je suis ammener à faire plusieurs requêtes curl l'une après l'autre ... Mon problème est donc simple, mon application est très lente car elle doit effectuer tout les curl un après l'autre pour me renvoyer une réponse.
Ma question est donc simple, comment traiteriez-vous cette problématique ?
Petits indices et pistes de réflexion : Utilisation d'ajax pour paralléliser les curl, utilisation de memcache pour simuler un multithread (on garde les variable dans memcache), Utilisation de bibliothèques déjà faites -multicurl paralelcurl etc.- (peu pertinent)
Merci d'avance pour vos réponses
Arnaud BOYER, eMarketing Manager @ Label Group
🔴 Hors ligne
Il y a pas mal de solutions...
Tu peux déjà tenter de faire le curl avec la commande "curl" linux et en exécuter un paquet à la fois (avec "&" et "exec" en PHP http://php.net/manual/fr/function.exec.php ).
J'ai déjà fait cela, ensuite on plaçant le résultat de la commande linux curl dans une base de données.
Ou alors tu peux même exécuter un script PHP depuis un autres script PHP : là encore avec une commande "exec" du genre "php monscript.php &".
Tu as aussi les threads PHP ( http://php.net/manual/en/intro.pthreads.php ) j'ai pas d'expérience là dessus, notre directeur technique nous l'avait déconseillé il y a quelques années (je n'ai jamais su pourquoi)...
L'utilisation d'Ajax me semble pertinente dans la plupart des cas : on utilise le javascript pour lancer les threads en parallèle. Mais, après il faut utiliser un navigateur ou un truc comme phantomjs (ce qui n'est pas nécessairement une contrainte en soi, c'est juste que ça ajoute encore plus de choses à maintenir).
Bon courage.
🔴 Hors ligne
Je pense que le cURL en multi thread peut régler ton problème.
Sur certains de mes scripts, ça bloquait de temps à temps car certains pages mettaient très longtemps à charger (=un serveur qui rame). Toi comme tu cURL à le suite, 1 URL qui met 10 secondes à charger pas ex ça te plombe tout le script
Tu peux mettre un timeout de 1 ou 2 secondes comme ça tu ne seras plus bloqué par ce genre de pb et refaire ton curl à la fin juste sur les URL lentes, voir si ça change qqch
Jérôme - Générer des revenus avec les NDD expirés (formation) | Blog perso jeromeweb.net
🔴 Hors ligne
+1 tu as la possibilité en natif de faire du curl en multi thread : http://php.net/manual/en/function.curl-multi-exec.php .
Moi j'ai pas encore testé, en fait sur un vps j'ai un script qui curl, je l'execute le même script "php monscript.php", évidemment faut que le script soit pensé pour gérer ça.
🔴 Hors ligne
Ba deja de ton Curl tu en attend quoi? tu stock juste les page? (je pense pas) ou tu analyse des choses dessus?
Sinon sur la doc PHP tu as une page pour ça : http://php.net/manual/fr/refs.fileprocess.process.php
🔴 Hors ligne
retour d'expérience:
1. création d'1 script parseur en php via CURL avec un GET puis un POST
2. Méthode 2 min bidouille
dans une page HTML, le script est lancé 20 x en parallèle via Ajax. Dès que les 20 réponses sont parvenues, la page HTML se rafraichit.
Ben, ça fait 3 ans que le serveur tourne ainsi à 80 000 requêtes / jour
L'ajax est une solution qui fonctionne sans devoir reprendre la méthode de faire les requêtes.
🔴 Hors ligne
Je te conseille de délaisser Curl au profit de Guzzle 6. Tu pourrais utiliser la classe "Pool" pour répondre à ton besoin : http://docs.guzzlephp.org/en/latest/quickstart.html?highlight=pool#concurrent-requests (avec éventuellement la fonction non documentée "batch" https://github.com/guzzle/guzzle/blob/master/src/Pool.php#L94)
🔴 Hors ligne
php, curl : un rolling multicurl qui va bien (php comme hhvm)
https://github.com/LionsAd/rolling-curl
https://github.com/chuyskywalker/rolling-curl
penses juste à ce que tu fetches. Si tout sur le même serveur, il va te falloir limiter le nombre de requêtes en // sinon risque de DOS le serveur.
Fan de WP, de spin et de génération de contenu en général.
Penguinzophren : lex est quod referencus
🔴 Hors ligne
Ay,
Je sais ce n'est pas du PHP mais ça peut toujours servir: http://serverfault.com/questions/248143/multithreaded-downloading-with-shell-script
Infrastructure, VPS, serveurs, développement web et scripts, ... https://www.alsahack.com !
🔴 Hors ligne
Tu as aussi la possibilité de créer des workers PHP (encapsulé dans un container Docker par exemple) avec l'utilisation d'un système de message queuing : c'est ce que j'utilise de mon côté mais en Node JS qui plus adapté pour ce type de besoin.
🔴 Hors ligne