Exécution parallèle de fonction

Invité
Invité n'ayant pas de compte PHPfrance

27 août 2010, 06:25

Bonjour à tous,

Malgré quelques heures passée sur google je sèche sur la manière d'aborder ma problématique.

Besoin fonctionnel:
- j'ai besoin d'avoir plusieurs fonctions sans fin d'exécution tournant en parallèle (2 socket server écoutant sur des ports différents, 1 hub XAP)
- pour chacune de ses fonctions je réagit en fonction des données reçues
- ces fonctions son décrites dans des class
- j'ai besoin d'utiliser des méthodes communes

Problemes:
Mes 3 serveurs fonctionnent bien indépendamment (Lancement lors de l'instanciation de la class), mais bloque sur la manière de lancer ces 3 instances en parallèles

Ex si pas clair:

Code : Tout sélectionner

$socksrv1 = new socketserver('localhost',8080); $socksrv2 = new socketserver('localhost',8081); $hubxap = new hubxap('localhost',8082); $socksrv1->start() #Lancement de la fonction qui est une boucle infinie $socksrv2->start() #doit fait la même chose mais évidement ca marche vu que la ligne précédente n'a pas rendue la main... $hubxap->start() #idem...
Etant jeune débutant je n'ai rien trouvé sur la manière de lancer ces fonction en mode asynchrone ou de manière évenementielle (bref qu'elles tournent en tâche de fond mais à partir du même script)

Y a t il une âme charitable qui saurait me conseiller ?

Merci d'avance

Eric

ViPHP
ViPHP | 4039 Messages

27 août 2010, 13:12

Tu ne voudrais pas faire un daemon, par hasard ? C'est possible en php, mais c'est franchement pas prévu pour, il y à d'autres langages plus adaptés.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 217 Messages

30 août 2010, 16:29

Bonjour,
vous ne pourrez pas lancer cela via un serveur web : problème de limitation de temps au niveau du script plus timeout au niveau du serveur.

Vous devrez donc opter pour un lancement en CLI. Sur un serveur linux vous pourrez lancez parallèlement vos scripts (un pour chaque serveur) à l'aide de la commande suivante dans un 4eme script :
exec('nohup /chemin/vers/php-cli serveur1.php 2>&1 &');
exec('nohup /chemin/vers/php-cli serveur2.php 2>&1 &');
exec('nohup /chemin/vers/php-cli hubxap.php 2>&1 &');