par
Kalyptus » 03 févr. 2009, 17:42
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
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 [b]setsid php -f socket.php[/b] :
[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);
}
}
?>[/php]
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