Affichage durant une boucle [Résolu]

Signaler
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008
-
Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008
-
Amis développeurs bonjour!

Je suis en train de programmer un chat basé sur un serveur développé en c, et un client développé en php qui se connecte au serveur via des sockets.
La connection, l'envoi de message et le retrait de message se fait sans aucun soucis tout fonctionne!
Tout sauf un détail qui est, je trouve, de taille.
En effet, pour récupérer les messages du chat, j'utilise une boucle infinie (qui se termine à la deconnection de l'utilisateur ou à la coupure du serveur).

Mon problème est le suivant: Les messages lus dans cette boucle ne sont affichés qu'une fois que la boucle est arretée. Il me semble de mémoire (je ne pourrais pas mettre ma main au feu qu'il s'agisse de scripts php) avoir vu des scripts executant des boucles et affichant le contenu de la boucle progressivement et non à la fin de cette derniere.
En gros j'aimerais obtenir la même chose que si je lançais mon script php depuis un invite de commande linux.

Petite précision toutefois, je fais tourner mes scripts sur deux serveurs dediés que je loue, donc je peux tout à fait changer la configuration de php si besoin. Ou est-ce plus simplement une fonction que j'aurais mal utilisé?

A titre d'info toutefois, voici ma boucle:

while(true)
                {
                if(!socket_last_error($socket)){
                    if($input = socket_read($socket, $port))
                            {
                            echo $input.'
';
                            flush();
                            }
                    }
                }

Merci mille fois d'avance
Bonne journée,

Benjamin

1 réponse

Messages postés
40
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
20 novembre 2008

En fait c'est bon, j'ai trouvé la réponse tout seul :)

Le flush ne suffit pas à vider le buffer dans le cas de lecture continue d'un flux, il faut ajouter un ob_flush(); en plus du flush();
Bon à savoir...