Page 1 sur 1

Je ne comprends pas bien pas ce code

Posté : 03 févr. 2009, 17:42
par Kalyptus
Bonjour,
J'ai récupéré ce code PHP dans un PDF, il sert à mettre en place un serveur ultra simple (le but est de le faire communiquer avec Flash), qui broadcaste à tous les clients connectés ce qu'on lui envoie.
Il tourne en permanence sur mon serveur dédié, et il fonctionne tout à fait. Plusieurs clients Flash s'y connectent, et lorsque l'un d'entre eux envoie un message, celui-ci est envoyé à tous les autres.
Ca peut servir à faire un tchat, un jeu online, etc.
J'ai choisi de prendre une source en PHP car je maîtrise mieux ce langage que le C ou le Python par exemple.
Voici le code, il est placé dans un fichier socket.php que je lance avec setsid php -f socket.php :
<?php 
$adresse = 'ip.publique.de.mon.serveur'; 
$port = 18000;
$connexion = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
socket_set_option($connexion, SOL_SOCKET, SO_REUSEADDR,1);
socket_bind($connexion, $adresse, $port); 
socket_listen($connexion, 5); 
$tabSockets = array($connexion); 

while (true) { 
	$sockets = $tabSockets;
	socket_select($sockets, $write = NULL, $except = NULL, NULL); 
	foreach($sockets as $socket) {
		if ($socket == $connexion) {
			$client = socket_accept($connexion);
                       	array_push($tabSockets, $client);
		} else {
			$flux = socket_recv($socket, $buffer, 2048, 0);
			$allclients = $tabSockets;
			array_shift($allclients);
			send_Message($allclients, $buffer); 
		}
	}
}

function send_Message($clients, $donnees) { 
	foreach($clients as $client) { 
		socket_write($client, $donnees);
	}
}
?>
Le seul problème, c'est qu'étant un débutant en PHP, je ne comprends pas bien ce code :\
J'entends, je comprends rien à comment le tableau est géré, comment la variable $socket est utilisée... La ligne "if ($socket == $connexion) {", à quoi sert-elle ?
Si une âme charitable passe par là et qu'elle comprend le code, aurait-elle l'immense bonté de le commenter, ou de répondre à mes questions ?

Merci d'avance

Posté : 04 févr. 2009, 22:06
par Heavenly
Personne ? :(

Posté : 04 févr. 2009, 22:16
par albat
Aujourd'hui, y en aura pour tout le monde ! :lol:
Alors...

Modération :
Kalyptus, PHPFrance n'est pas un site de distribution de scripts gratuits,
ni de débuggage de scripts téléchargés et utilisés sans compréhension.

Merci de prendre le temps de lire les règlements.


En revanche, si ton interrogation concerne un (ou plusieurs) points précis
(tels que les sockets, par exemple), je t"invite à formuler une question à ce sujet
plutôt qu'une demande générale d'explication d'un script entier.

Et...

Modération :
Heavenly, les "up" sont interdits sur PHPFrance.

Merci de prendre le temps de lire les règlements.

Posté : 04 févr. 2009, 22:59
par Kalyptus
Merci d'avoir au moins répondu (ahem), en fait dans la mesure où je ne comprends pas bien ce code dans son ensemble, je vois mal comment formuler des questions précises.
C'est la logique du code que je ne saisis pas, je ne demande pas une correction ni quoi que ce soit mais une description partie par partie de ce que fait le code.
Et désolé du up mais sans ça personne ne m'aurait jamais lu, etc etc.

Bonne soirée