Alors tout d'abord il faut regarder comment récupérer les utilisateurs connectés. Pour cela tu fais une liste en base de données des serveurs minecraft ainsi que le port utilisés par ces serveurs. Tu peux en effet récupérer le nombre d'utilisateurs connectés mais la procédure pour cela est un peu plus complexe. Les jeux vidéos ne sont pas des sites web, aussi le protocole utilisé est le TCP par envoi de websockets (qui permettent d'échanger des informations de manière très rapide entre le client et un serveur) sur le port par défaut de minecraft à savoir le 25565.
Une fois que tu sais cela, tu peux écrire ton script PHP qui doit successivement :
- Ouuvrir une connexion via des websockets sur le protocole TCP sur une adresse données sur le port 25565 (par défaut).
- Lire les informations de ce serveur.
- Parser ces informations pour en extraire le nombres de joueurs connectés.
Pour cela j'utilise la fonction php stream_socket_client. J'ai du faire quelques recherches et tests pour connaitre le port utilisés et les informations que l'on récupère. La lecture des sockets est un peu fastidieuse mais la voici :
Petit mot sur mes fwrite et fread, on utilise habituellement un fichier que l'on a au préalablement ouvert avec fopen, néanmoins c'est une étape qui est déjà faite quand on utilise les sockets (c'est un flux qui nous est retourné).
Voiàl pour le script de base. Ensuite imagine un fichier PHP qui va récupérer une liste de serveurs depuis une base de données et qui boucle dessus. Ensuite tu ajoutes un cron job (une tâche effectuée par linux tout les X temps) et qui va éxecuter ce script, couple ça à un cache PHP dans le site et ça te donne comment le site serveurs-minecraft est développé. Comme tu le vois la lecture de ces informations est très rapide ! (le script s'execute en 2ms chez moi). Même avec 500 serveurs, ça ne mettra qu'une seconde à récupérer toutes les informations. Rajoute la partie récupération des serveurs en bdd + leur update, tu ne dois pas dépasser les 3s d'execution.
Rien de bien compliqué au final. En tout cas c'est une question très loin d'être bête je me suis bien amusé à te répondre. Les deux seuls élements un peu tricky étaient savoir que c'était en TCP sur le port 25565 par défaut que j'ai trouvé sur un wiki minecraft. Le ddeuxième élement était la lecture du fichier de sockets, pour cela j'ai enregistré les informations dans un fichier juste à coté de mon script (que j'ouvre en php via fopen) et avec un convertisseur hexadecimal j'ai trouvé mes informations en tatonnant un petit peu.