Coucou,
Cherchant à progresser, je me suis mis en tête de faire un tuto sur le client/serveur avec socket en java. Je me suis naturellement tourné vers celui-ci : http://defaut.developpez.com/tutorie...r/multithread/
Fort de cet expérience, j'ai fait un chat en mode console, que j'ai enrichi au fir et à mesure (salon, whisper, kick, privilège, mp etc...)
Puis de file en aiguille, une interface cliente, et une console d'admin, une authenfication avec appel JDBC, et ainsi de suite...
Là, je me suis dit que je voulais faire plus, faire bouger des sprites sur un plan 2D (qui contient donc les coordonnée x/y de chaque sprite).
Au moment de réfléchir sur l'implémentation du bousin. J'hésite.
Voici les solutions qui s'offrent à moi :
Solution 1 :
Quand un client (A) bouge, il envoie au serveur.
Après vérif du serveur, il envoie à tous les clients sur le plan 2D que A a bougé.
Si B bouge, de même, et ainsi de suite.
Inconvénient, si tout l'alphabet bougent chaque c'est chaque mouvement qui gènère un nombre important d'envois.
Faudrait il alors implémenter coté serveur, pour ne pas envoyer les mouvements à tout le monde, mais seulement à ceux qui sont proches (et qui donc voient le mouvement !) ?
Solution 2 :
Quand un client (A) bouge, il envoie au serveur.
Quand un client (B) bouge, il envoie au serveur.
Après vérif du serveur, il n'envoie à tous les clients que tous les xxx Millisecondes l'état du plan2D. Pas après chaque mouvement, donc, mais à intervalle régulier.
Dans les faits, je fais un thread coté serveur qui se réveille toutes les xxx Milliseconde, sérialise le plan, et va les envoyer aux clients.
Inconvénient, comme coté serveur, j'ai un thread par client, je parcours tous les client, et envoie sur leur "outputStream"
Solution 2(bis) :
Idem que le la solution 2. Mais ici plutôt que de faire un thread unique qui se réveille toutes les XXX secondes, c'est chaque thread coté serveur qui envoie à intervalle régulier au client.
Solution 3
Un mix de la solution 1 et 2bis.
A chaque mouvement on envoie à chaque client uniquement ce qui se passe autours de lui et celà uniquement à intervalle régulier.
Pas sur que je sois bien clair...
Merci d'avance pour vos conseils éclairés.
Partager