Bonjour,
Je travail actuellement sur un petit serveur PHP exécuté en CLI. J'ai correctement démarré une connexion socket, j'ai donc le script suivent pour attendre une éventuelle connexion :
Jusqu'ici tout fonctionne parfaitement si un utilisateur se connecte le message : "Nouvelle connexion !" s'affiche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while (true) { if(($user = socket_accept($sock)) === true){ echo "Nouvelle connexion !"; } }
Sauf que en plus d'attendre une connexion je doit pouvoir entré des commandes, que j'ai préalablement codé, sur la console. J'utilise donc ce script pour exécuté une commande :
J'ai donc eu l'idée de placer ce script dans la boucle précédente comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $text = trim(fgets(STDIN)); $Command->execute($text);
Malheureusement ce code ne fonctionne pas... Je ne peut pas entrer de commande sauf si un utilisateur ce connecte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 while (true) { ****if(($user = socket_accept($sock)) == true){ ********echo "Nouvelle connexion !"); ****} ****$text = trim(fgets(STDIN)); ****$Command->execute($text); }
J'ai donc rendu la fonction socket_accept() non bloquante :
Cela règle partiellement mon problème... Chaque connexion est traité uniquement après l’exécution d'une commande, le message : "Nouvelle connexion !" s'affiche donc qu'a ce moment la. Or moi je souhaite pouvoir envoyer des commandes a tout moment et voir s'afficher le message en temps réel a chaque connexion.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 socket_set_nonblock($sock); while (true) { ****if(($user = @socket_accept($sock)) === true){ ********echo "Nouvelle connexion !"); ****} ****$text = trim(fgets(STDIN)); ****$Command->execute($text); }
J’espère avoir été compréhensible, car il est pour moi dans ce cas difficile de m'expliquer.
help me !
Cordialement Kaw7413.
Partager