pas la meilleurs mais pas trouvé mieux
j'ai déjà utilisé ca comme base, et c'est d'ailleurs celle qui m'a permis de comprendre les socket en php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| <?php
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); //Création de la ressource socket
//A partir d'ici petite difference
//On bind la socket sur l'ip et le port, qui va permetre d'ecouter la socket
socket_bind($socket,"127.0.0.1","8089"); //On attribut une ressource de connexion à la socket (Va permetre à un client de se connecter à celui-ci)
socket_listen($socket); //On ecoute la socket pour de nouvelles connexion
//Quelque variable de sauvegardes
$sockets = array(); //liste de touts les sockets
$clients = array($socket); //Liste de touts les clients
$client = null; //Contiendra la socket actuelle du client
while(true)
{
//on stocke le tableau $clients dans la variable sockets de type array
$sockets = $clients;
/* Ici on selectionne les sockets connecté, lorsque la condition est passé
cela veut dire que aucune socket n'est occupé*/
if (socket_select($sockets, $write = NULL, $except = NULL, 0) < 1)
continue;
//Si un nouveau client est ici
if (in_array($socket, $sockets))
{
//On l'accept et on sauvegarde sa socket dans $clients et $client
$clients[] = $client = socket_accept($socket);
//On supprime le contenu de $sockets (qui est une variable de stockage du socket temporaire) si le socket actuelle est dans l'array
$key = array_search($socket, $sockets);
unset($sockets[$key]);
}//end if
foreach($sockets as $my_socket)
{
$read = socket_read($my_socket,1000000);
//Si un des clients ne reçois pas les méssages, alors on le supprime de la liste et on envoie un message général
if($read==false)
{
$key = array_search($socket, $clients);
unset($clients[$key]);
socket_write($my_socket,"Client disconnected");
}
}
socket_close($socket);
?> |
en espérant bien sur que cela te soit utile...
tu as aussi le fait que pour certains clients, tu soit obligé d'envoyer un minimum de caractère, sinon, la réponse passe pas, du coup, rien ne t’empêche de lancer une réponse qui contient le id de la transaction suivi de 200 espaces et un retour puis de la véritable réponse.