2012-06-29 5 views
0

Je souhaite implémenter une application de chat dans laquelle php agira comme serveur et android agira comme client. Le problème est que php script continue à charger et ne s'arrête pas.Quand je présente une boucle pour écouter et émettre des messages en continu envoyé à partir de mon émulateur android.Mais lorsque je supprime la boucle, il continue à charger et dès que J'envoie un message de mon émulateur android il sort une fois et le script s'arrête.Maintenant, je ne sais pas comment accomplir cela (c'est à dire chaque fois que j'envoie des messages d'android il les écho sur la page et continue à le faire jusqu'à ce que j'envoie une sortie message qui sort du script).Socket Programmation Le script PHP continue de se charger

Voici mon script php:

set_time_limit (0); 

$address = '10.116.27.107'; 
$port = 1234; 

$sock = socket_create(AF_INET, SOCK_STREAM, 0); 
socket_bind($sock, $address, $port) or die('Could not bind to address'); 

socket_listen($sock); 
while(1) 
{ 
    $client = socket_accept($sock); 
    $input = socket_read($client, 1024); 

    $output = preg_replace("[ \t\n\r]","",$input).chr(0); 
    socket_write($client, $output); 

     if($input=="exit") 
    break; 

echo $input; 

socket_close($client); 

} 
socket_close($sock); 
+0

Qu'entendez-vous par "n'arrête pas le chargement"? Êtes-vous en train d'essayer de l'ouvrir dans un navigateur? En fait, la partie serveur * signifie * ne jamais arrêter le chargement, jusqu'à ce qu'il soit forcé de quitter. – Lyth

Répondre

1

Afin de mettre en œuvre une application de chat, vous devrez améliorer votre code afin qu'il puisse gérer connexions multiples, ce qui est un peu plus compliqué que lire et écrire à un client. D'après mon expérience, il s'agit d'un énorme bond d'un système utilisateur unique à un multi-utilisateur, ce qui explique pourquoi il faut du temps pour apprendre à écrire un système de discussion par essais et erreurs.

Cependant, je crois que faire ce qui précède vous aiderait à éviter vos problèmes, ce qui est probablement dû à ce qui est appelé bloquant - le système attend l'entrée/sortie avant de continuer et ne reçoit pas tout.

Fondamentalement, il y a quelques choses que vous devez prendre pour compte avec les applications de chat:

  1. Vous devez exécuter votre script de chat en ligne de commande php, en cours d'exécution dans le navigateur vous présentera plus problèmes compliqués en ce qui concerne les délais d'attente et exactement comment un navigateur s'attend à ce qu'une page Web fonctionne. Si vous utilisez Mac OSX vous pouvez utiliser le terminal, si vous connaissez Linux, vous pouvez évidemment utiliser linux, si vous êtes sur Windows ... obtenir puTTY et vous connecter à un serveur linux, je suis sûr que vous pouvez exécuter la ligne de commande PHP sur Windows, ce n'est pas quelque chose que j'ai déjà essayé (ou souhaité) à faire.

  2. Vous aurez besoin d'utiliser socket_select() il y a quelques exemples simples de comment l'utiliser ici dans les commentaires de l'utilisateur, http://uk.php.net/socket_select.

  3. Vous devez toujours être au courant quel état un client est - à savoir lire uniquement lorsque vous pouvez lire, écrire seulement quand vous pouvez écrire ... et généralement si vous pouvez lire ou écrire alors vous devez faire Ainsi, pour que les choses continuent à fonctionner correctement (et ne finissent pas par geler), les applications de chat sont assez délicates précisément pour cette raison.

  4. Les clients peuvent soudainement se déconnecter et se connecter, vous devez donc gérer cela dans le processus de lecture et d'écriture.

  5. Chaque fois que vous lisez et écrivez - en particulier en utilisant php - les fonctions de lecture et d'écriture ne peuvent pas envoyer ou recevoir toutes leurs informations en une fois. Similaire à fwrite() et fread() vous devriez vérifier pour voir combien a été écrit (et continuer à écrire si pas terminé) et continuer à lire jusqu'à ce que rien d'autre ne reste à lire. En fonction de vos clients, certains systèmes s'attendent à ce que les messages se terminent/se terminent par des caractères de terminaison spécifiques, à savoir \ n ou \ 0. La plupart des applications de chat détectent lesquelles utiliser ou envoyer les deux dans le cadre de chaque message discret.