2012-08-15 7 views
5

Je travaille sur un projet énergétique. Sur mon site, il est possible que les services énergétiques soient enregistrés avec le processus d'inscription via les services Web. Au départ c'était 1 pour commencer maintenant 3 autres sont venus s'intégrer.PHP Comment implémenter simultanément plusieurs services Web?

Sur la toute première page, je dois montrer les plans en fonction des codes postaux. Maintenant, sur cette page, je dois demander à tous les 4 fournisseurs d'énergie de lister les plans énergétiques.

Pour demander chaque service à la fois de façon séquentielle, il faudra certainement plus de temps car je dois obtenir les données de source externe et c'est la première page, donc je ne veux pas le faire ralentir à la première instance seulement.

Comment puis-je faire une demande à tous les services simultanément et collecter les données de chaque service et l'inscrire sur la page finale.

+0

Je sais que beaucoup vont se plaindre, mais avez-vous pensé à multi-threading? Dès les premiers résultats google, ils semblent être de bons endroits pour commencer ... http://villavu.com/forum/showthread.php?t=73623 et http://blog.motane.lu/2009/01/02/multithreading-in-php/support semble mince, mais cela pourrait accélérer les choses en ayant toutes les 4 demandes aller à "une fois" - c'est ce que j'imagine au moins ... – blad

+1

Qu'en est-il de la mise en cache? À quelle fréquence ces plans changent-ils? Est-ce que ça doit être en temps réel? Pourquoi ne pas avoir un travail cron qui interroge tous les services toutes les 1-5 minutes et stocke les résultats dans memcache ou une table MySQL HEAP? Ensuite, votre frontal pourrait lire à partir du cache au lieu des services Web. – Costa

+0

@Costa Semble être une bonne solution. Mais le problème est même que je ne sais pas combien de codes postaux sont et à quelle fréquence ils changent le plan. Il pourrait y avoir environ 50K zipcodes. Mais je garderai cela à l'esprit et je mettrai en œuvre là où ce sera faisable. – Vins

Répondre

3

Il n'y a vraiment qu'une façon non-méchante de le faire avec PHP lors de l'exécution sur un serveur web. Vous aurez besoin du module cURL compilé en PHP. Il a un support intégré pour l'exécution de requêtes parallèles. Regardez les commentaires et la documentation sur www.php.net pour des exemples d'utilisation.

Essayez: http://www.php.net/manual/en/function.curl-multi-init.php

D'autres options, comme bifurquer processus d'arrière-plan ou en appelant un shell UNIX, sont terribles pour maintenir et rarement multiplateformes. Le multithreading n'est pas une option valide dans presque n'importe quel environnement PHP commun.

Je devrais mentionner, bien que cela ne soit pas nécessairement suggéré, qu'une approche AJAX pourrait être utilisée. Ce n'est pas aussi léger dans tous les cas, mais il faut le peser.

+0

Lorsque je faisais face à une situation similaire, je l'ai résolu en déchargeant le travail pour récupérer les données dans un shell de gâteaux, qui utilisait pcntl_fork pour exécuter des requêtes de service Web simultanées. Les processus enfants stockaient les réponses dans la mémoire partagée et, lorsque tous les processus étaient terminés, le processus shell parent les collectait et les renvoyait à la demande de données. Cela a fonctionné pour moi de réduire les temps de chargement par de grands nombres. Mais tenez compte de ce que Pestilence a dit à propos de cette solution. – Ceeram

+0

@pestilence Que faire si j'utilise une requête différente pour l'appel de services Web? un utilisant REST secong utilisant SOAP tiers en utilisant Curl .. A ce moment-là Comment ça va aider ful .. merci –

Questions connexes