2013-10-03 4 views
2

J'apprends et j'essaie de comprendre socket en php mais j'ai un petit problème avec while loop.Php socket et while

Ceci est mon code de base:

côté client

<?php 
    set_time_limit(0); 

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 

    $res = socket_connect($socket, '127.0.0.1', 2000); 

    $input = "Client to Server Message"; 

    socket_write($socket, $input, strlen($input)); 
    $res = socket_read($socket, 1024); 

    echo $res; 

    socket_close($socket); 
?> 

Et le côté serveur

<?php 
    set_time_limit(0); 

    $address = "127.0.0.1"; 
    $port = 2000; 

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 

    socket_bind($socket, $address, $port) or die("Can't bind the socket"); 

    socket_listen($socket); 

    echo "Server waiting connexion..."; 

    $client = socket_accept($socket); 

    $input = socket_read($client, 1024); 

    echo "\nInput : ".$input; 

    $output = 'Server to Client Message'; 

    socket_write($client, $output); 

    socket_close($client); 
    socket_close($socket); 

    echo "\nServer closed"; 
?> 

Il fonctionne, mais si je veux ajouter une boucle while côté serveur pour gérer plusieurs messages du côté client, mon navigateur fait une boucle infinie et je ne peux pas récupérer le message du serveur.

Comment dois-je faire pour que cela fonctionne? Est-ce que quelqu'un peut m'expliquer la manière basique de faire un chat en utilisant la socket avec PHP seulement (je peux le faire avec socket.io et NodeJs) ou m'envoyer un bon tutoriel sur le web?

+0

vous écoutez la même machine seulement? – Raptor

+0

Je ne comprends pas. Les deux PHP sont sur le côté serveur car c'est PHP. Il n'y a pas de côté client PHP –

+0

Shivan -> Oui j'écoute le même mache seulement pour apprendre – user2840866

Répondre

0

Je pense que vous êtes un peu sur la mauvaise voie.

Vous avez écrit deux petits scripts php où le côté serveur n'est pas simplement un script exécuté sur un serveur Web, mais c'est déjà un serveur. Alors que votre côté client est exactement comme un navigateur (juste un peu basique). Donc directement au point que vous avez écrit une application de chat et un serveur de discussion, mais pas un site Web. Cela signifie que vous devez exécuter les deux scripts en tant que script de console. Sous Linux, vous avez la commande "php". Sous Windows lire ce http://php.net/manual/de/install.windows.commandline.php

Si vous voulez juste une utilisation simple de chat ceci:

<!-- html stuff --> 
<pre> 
<?php 
//chat.php 

// Safe message on server using file 
if(isset($_GET['msg'])){ 
    // be carefull it's not clever to let the world write 
    // to your server even if it's a textfile 
    $f = fopen("db.txt","a+"); 
    fputs($f, $_GET['msg']); 
    fclose($f); 
} 

// print all messages 
readfile("db.txt"); 

?> 
</pre> 
<form> 
<textarea name="msg"></textarea> 
<input type="submit"/> 
</form> 

Pour plus le chat comme le sentiment, ce qui signifie pas reload la page requise dont vous avez besoin et demandes Javascript AJAX. Regardez ici http://www.w3schools.com/php/php_ajax_php.asp

Le problème est tous les bons tutoriels pour les discussions que j'ai trouvé et utilisé moi-même utilisent normalement également une base de données mysql.