Echange des données client/serveur, comment procéder ?
Bonjour,
Je dois m'occuper de la partie serveur pour un MMORPG.
J'utilise la SMFL 1.6 comme API.
Pour le moment, j'ai pensé le faire comme ceci :
Une classe serveur qui représente mon Serveur, et ce serveur possèdera plusieurs threads qui auront chacun leur tâche propre. Le Serveur possède aussi une liste (vector) de Joueur représentant les joueurs connectés.
Pour l'instant, j'ai développé le thread de connexion/authentification en utilisant les selectors de la SMFL et le protocol UDP. Dans ce thread je détecte si on m'envoi un paquet, je test les données, j'instancie un Joueur et réécoute sur le port.
Grace aux selectors, si un client fait une demande d'authentification, alors il est mis en attente le temps que l'autre se termine (je pense que c'est gérable car l'instanciation ce fait assez rapidement (2 requêtes SQL, 1 ajout dans un vector et un instanciation + quelque test et un parcours de vector), qu'en pensez vous ?
Maintenant, je dois m'occuper de la partie envoie de données et reception de données client/serveur mais je ne sais pas du tout par où commencer et comment m'y prendre... =x
Dois-je faire 1 thread pour émission et un autre pour réception ?
Dois-je rassembler les deux ?
Imaginons que mon thread attend un paquet d'un client (thread d'émission donc), hop, je l'ouvre et regarde ce qu'il y a dedans, je décrypte le message et il faut ensuite que j'envoie les infos au autre clients.
Mais problème !? Si un autre client envoie un paquet au serveur pendant que celui ci effectue les calculs, comment je dois faire ?
Faudrait-il que je stocke les paquet reçu dans un vector et mon thread d'émission s'occupe de travailler sur ce vector s'il il contient des paquet ?
Du coup, mon thread de réception servirai simplement d'écouter et ranger les paquets dans un vector et ainsi il réécouterai plus vite le port pour les futur paquet ?
Mais toujours le même soucis, si je reçoit un paquet alors que le thread de reception est en train de ranger dans le vector, le paquet sera perdu ? Ou il sera mis en attente et traité tout de suite après ?
Je ne sais pas si je peux utiliser encore les selectors ou les threads :/
N'hésitez pas à critiquer si vous trouvez que je dois changer des choses et faire autrement etc... Je prend toute les informations que vous me donnerais ! :)
Merci beaucoup