Un site présenté dans la catégorie "Jeux" du FlashFestival 2004 représente un chat graphique agrémenté d'un petit jeu bien sympathique, duquel j'ai parfois du mal à décrocher : il s'agit de Chimboz. La particularité de ce site est que son serveur multi-utilisateur est codé en PHP. Du coup, l'envie de m'y remettre m'a pris ! :D

Histoire aussi de me mettre un peu à la nouvelle syntaxe de PHP5, j'ai effectué un mix improbable du patServer dont j'ai déjà parlé dans ce ticket, et de la version PEAR de ce même serveur auquel j'ai appliqué ma propre vision du code. J'y utilise les notions de méthodes statiques et de classes abstraites. J'ai implémenté une méthode broadcastEvent (on sait d'où ca vient :P) qui envoie des évenements à un objet de callback (seulement un seul pour l'instant, je réfléchis à l'utilité de ne pas limiter le nombre d'écouteurs, ce qui serait d'ailleurs trés simple à modifier) ...

Une classe SockServerManager agit en tant que Factory pour la création de nouveaux serveurs. Pour l'instant, elle se contente de créer une nouvelle instance d'un serveur et de la retourner, mais je prévois de lui faire stocker des références vers chaque serveur crée, et de lancer elle même un serveur avec son propre callback, qui pourra servir à l'administration de tous les serveurs lancés, dans le but de créer une interface d'administration en Flash. 8)

L'utilisation de l'instruction socket_select me permet déjà de ne traiter que les sockets qui ont recu une information, sans toucher aux autres, mais je prévois aussi de me pencher sur tout ce qui est gestion des flux dans PHP, avec l'utilisation de sockets non-bloquants pour faire du pseudo multi-threading ... A ce propos, voici un article d'introduction au TCP/IP que j'ai trouvé trés interessant.

Voila, l'archive contient toutes les classes nécessaires. Attention, le .bat de lancement utilise le chemin complet du php.exe de PHP5, il faut donc le changer si votre version n'est pas installée dans C:\php5\php.exe ... Et il faut également activer l'extension des sockets dans votre php.ini ! Vous n'avez plus qu'à créer votre propre callback, qui peut intercepter les évenements onStart, onShutdown, onConnect, onConnectionRefused, onReceiveData et onClose ... 8)

::Télécharger SockServer.zip::