Hello,
Ya deux jours, j'ai eu une irrésistible envie de coder, j'ai vu le raccourci de LoL sur mon bureau, et .. j'ai décidé de tenter de faire un petit MOBA (type LoL / DotA).
Je me suis bien sur lancé immédiatement dans le code sans aucune réflexion préalable ni même une idée exacte du gameplay que je voulais
Le projet avance tranquillement, mais j'ai un doute sur l’architecture du serveur. Actuellement j'ai :
- le serveur qui possède un thread : il accepte des connections TCP (on verra plus tard pour les transferts UDP), crée des joueurs (à comprendre plus au sens de client que joueur) à partir de ces connections et attends des messages entrants sur les connections ouvertes, à la réception d'un message, le joueur traite le message via un threadpool.
- un système d'intentions : Quand une partie est lancée, un joueur possède un avatar. Les avatars (ou pnj, non implémentés actuellement) possèdent 1 ou plusieurs intentions (comme l'intention de se déplacer aux coordonnées (x;y) par exemple), les intentions sont mises à jour à la réception de messages des clients.
- un gameManager, qui gère les parties lancées et mets à jour toutes les entités de la partie en fonction de leur intentions.
Le problème vient de ce gameManager, il faut une mise à jour régulière des entités de chaque partie lancée, sans surcharger inutilement le serveur.
J'ai pensé faire une 10ene d'itérations (chaque itération étant une maj des intentions des pnj, et une maj des états/position de toutes les entités de la partie) par seconde et par partie, et d'y ajouter une itération immédiatement après le changement d'une intention d'un joueur.
Pour ça, chaque itération serait soumise au threadpool avec un callback ajoutant l'itération suivante au bon moment (pour 10 itérations par seconde, il y aurait une attente de 100ms moins le temps qu'il à fallu pour traiter l'itération précédente)
Est-ce une bonne idée ?
Est-ce qu'il y a mieux ?
Partager