Multi requête Curl asynchrone

Sur votre site Internet vous voulez récupérer des informations sur un autre serveur ou sur le votre via Curl. Mieux encore vous utilisez de l'Ajax pour récupérer plusieurs informations sur des sites distants. Le Javascript interdisant le cross domaine, vous utilisez des requêtes sur votre serveur.

L'architecture

Pour réduire le temps d'affichage d'une page, il peut être nécessaire de récupérer les données sur un autre serveur via un appel en Ajax, qui fera une requête Curl sur un autre serveur.

Dans un premier temps, le navigateur va faire une requête Ajax sur le serveur qui, via cette page, appellera des données en Curl.

demande curl

Ensuite, le serveur va retourner les données

réponse curl

Lenteur

Il est possible, d'autant plus si vous utilisez un Framework, que les requêtes soient lentes à répondre. Si vous regardez avec un outil du type FireBug sous FireFox vous remarquerez que les requêtes se feront les unes après les autres. Ceci est dû aux sessions.

Les sessions en PHP sont stockées dans des fichiers. Un fichier équivaut à une session or lorsqu'un navigateur demande simultanément plusieurs pages, il ne peut pas ouvrir et écrire dans le fichier session en même temps. Donc les pages s'exécuteront l'une derrière l'autre.

curl synchrone

SOLUTION

Il faut dès que possible dans le code fermer la session grâce à la fonction "session_write_close()". Bien sur faites le avant l'appel Curl. Automatiquement le script suivant pourra prendre la main sur le fichier de session. Inconvénient: vous n'avez plus accès aux données de "$_SESSION".

curl asynchrone

Vous remarquerez que les scripts php des appels curl se font de manière asynchrone et non plus synchrone, l'un derrière l'autre.