Vous n'êtes pas identifié(e).

  • Contributions :
  • Vos boîtes de messages privés sont vides.

🟣 [PHP] La meilleure façon selon vous de faire du "multithread" en Curl?


#1 2016-01-18 10:28:53

Mention duan78
🥉 Grade : Scout

AuxiliaireStratègeBusiness ManConsomateur de Liens
Lieu : Paris
Inscription : 2012-08-31
Messages : 589
Likes : 1

Audit et Analyse
Sémantique
Marketing
Social Engineering
Site Web

[PHP] La meilleure façon selon vous de faire du "multithread" en Curl?

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

0
J'aime ❤️

🔴 Hors ligne

#2 2016-01-18 12:34:59

Mention NicolasWeb
🥈 Grade : Soldier

Membre du CercleOfficierStratège100likes1000 messages
Lieu : Besançon (France)
Inscription : 2015-09-30
Messages : 1 075
Likes : 188

Rédaction
Sémantique
Site Web

Re : [PHP] La meilleure façon selon vous de faire du "multithread" en Curl?

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.

0
J'aime ❤️

🔴 Hors ligne

#3 2016-01-18 15:09:06

Mention jeromeweb
🥉 Grade : Scout

Auxiliaire1000 messages
Lieu : pas loin de paris
Inscription : 2014-10-12
Messages : 1 328
Likes : 5

PHP
Automatisation Web

Re : [PHP] La meilleure façon selon vous de faire du "multithread" en Curl?

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

0
J'aime ❤️

🔴 Hors ligne

#4 2016-01-18 15:13:16

Mention Mitsu
🥉 Grade : Scout

AuxiliaireIngénieur webStratège1000 messagesMembre Hospitalier
Inscription : 2014-11-17
Messages : 2 012
Likes : 8

Développement PHP
Développement JS
Audit et Analyse
Netlinking
Site Web

Re : [PHP] La meilleure façon selon vous de faire du "multithread" en Curl?

+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.

0
J'aime ❤️

🔴 Hors ligne

#5 2016-02-17 11:01:02

Mention ciboulette
🥉 Grade : Scout

Auxiliaire
Inscription : 2015-11-01
Messages : 391
Likes : 5

Re : [PHP] La meilleure façon selon vous de faire du "multithread" en Curl?

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

0
J'aime ❤️

🔴 Hors ligne

#6 2016-02-17 11:24:16

Mention DevForEver
🥉 Grade : Scout

AuxiliaireIngénieur web10likes
Lieu : Alsace
Inscription : 2016-02-16
Messages : 178
Likes : 13

PHP
JAVA
DB Admin
Sécurité

Re : [PHP] La meilleure façon selon vous de faire du "multithread" en Curl?

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 big_smile

L'ajax est une solution qui fonctionne sans devoir reprendre la méthode de faire les requêtes.

0
J'aime ❤️

🔴 Hors ligne

#7 2016-04-24 13:27:31

Mention otassel
♟️ Grade : Recruit

DiscipleIngénieur webStratège
Inscription : 2016-04-24
Messages : 13
Likes : 0

Netlinking
Networking SEO
Développement PHP
Adminstration Serveur

Re : [PHP] La meilleure façon selon vous de faire du "multithread" en Curl?

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)

0
J'aime ❤️

🔴 Hors ligne

#8 2016-05-25 08:08:09

Mention Egres
🥉 Grade : Scout

AuxiliaireIngénieur webStratège
Lieu : In the clouds
Inscription : 2012-08-14
Messages : 173
Likes : 0

Développement PHP
Adminstration Serveur
Content Spinning
Sémantique
Site Web

Re : [PHP] La meilleure façon selon vous de faire du "multithread" en Curl?

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

0
J'aime ❤️

🔴 Hors ligne

#9 2016-05-25 10:04:07

Mention KrustyHack
🥉 Grade : Scout

AuxiliaireNarcissiqueIngénieur web
Inscription : 2015-12-02
Messages : 660
Likes : 4

Adminstration Serveur
Adminstration Serveur
Adminstration Serveur
Développement Python
Site Web

Re : [PHP] La meilleure façon selon vous de faire du "multithread" en Curl?

Ay,

Je sais ce n'est pas du PHP mais ça peut toujours servir: http://serverfault.com/questions/248143/multithreaded-downloading-with-shell-script smile


Infrastructure, VPS, serveurs, développement web et scripts, ... https://www.alsahack.com !

0
J'aime ❤️

🔴 Hors ligne

#10 2016-05-25 15:26:21

Mention otassel
♟️ Grade : Recruit

DiscipleIngénieur webStratège
Inscription : 2016-04-24
Messages : 13
Likes : 0

Netlinking
Networking SEO
Développement PHP
Adminstration Serveur

Re : [PHP] La meilleure façon selon vous de faire du "multithread" en Curl?

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.

0
J'aime ❤️

🔴 Hors ligne

Pied de page des forums