IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Socket Serveur pour jeu réseau 2D


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 34
    Par défaut Socket Serveur pour jeu réseau 2D
    Bonjour,
    je développe en ce moment un duo Client / Serveur pour un jeux réseau 2D.
    J'utilise les sockets pour les échanges entre client et serveur.

    Tout ce passe bien pour le moment à ce niveau mais j'ai besoin de quelques précisions :

    J'utilise un serveur multi-thread et une seule socket : une thread principale analyse le premier message et distribue le travail à d'autres threads ( chaque client à une thread à son écoute ).

    Une fois dans le jeu, le client à besoin en continu des différentes coordonnées des personnages étant sur la même carte que le joueur.
    J'utilise les méthodes .write .flush et .readLine pour l'envoie d'informations, mais cela me parait un peu fastidieux d'envoyer sans arrêt les coordonnées de cette façon.
    J'ai pensé à utiliser l'envoie d'objet plutôt que de string mais cela ne me parait toujours pas très correct :

    Sachant que le client dispose de plusieurs thread qui doivent envoyer les coordonnées et les recevoir, envoyer différente caractéristiques au serveur, écouter certaines actions pour les envoyer, j'ai peur qu'une fois deux thread du serveur se 'superpose' et ainsi les coordonnées envoyés par le serveur soit pris pour des points de vie ( par exemple ).

    Quels sont les moyens pour avoir une bonne relation client/serveur ?

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par matthieu637 Voir le message
    Quels sont les moyens pour avoir une bonne relation client/serveur ?
    Avoir un bon protocole
    Manifestement, tu as mélangé un peu les échanges d'informations. Envoyer des String n'est peut-être pas optimal car il faut convertir les données. Envoyer des objets non plus puisqu'il faut créer un nouvel objet avant de l'utiliser, mais c'est à voir selon les cas, la quantité d'info que tu auras à envoyer et la facilité d'utilisation.
    Une idée simple : envoyer les infos par byte, avec le premier byte représentant le type d'info qui suit. Par exemple un message se décomposera comme ainsi :
    - byte 0 : type d'info (ex : 0 -> coordonnées, 1 -> points de vie, 2 ->...)
    - byte 1 : nombres d'octets à lire
    - à partir du byte 2 : les infos du messages

    Cela produira des messages courts et précis, "facile" à manipuler.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 34
    Par défaut
    Merci pour cette bonne méthode je vais l'appliquer,néanmoins pour lire les bytes :
    lis-tu séparément chaque byte et répètes-tu l'opération autant de fois que le byte 1 donne de byte à lire (utiliser plusieurs méthode .read ) ?
    ou bien lis-tu tous les bytes d'un coup et les découpes-tu ensuite ( utiliser une seule méthode .read )


    De plus, pour une bonne interprétation des informations par le client, dois-je aussi n'avoir qu'un Thread à son écoute et son écriture ( comme le serveur ) ?

    Je ne vois pas trop comment faire une seule classe qui pourrait répondre aux besoins d'écriture et de lecture de toutes les autres classes.

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par matthieu637 Voir le message
    lis-tu séparément chaque byte et répètes-tu l'opération autant de fois que le byte 1 donne de byte à lire (utiliser plusieurs méthode .read ) ?
    ou bien lis-tu tous les bytes d'un coup et les découpes-tu ensuite ( utiliser une seule méthode .read )
    A toi de choisir selon la taille des messages, le nombre de messages à lire... le flux de lecture est déjà bufferisé, donc tu peux très bien appeler autant de fois que nécessaire la méthode "read()" si la longueur moyenne d'un message est petite.
    Il n'y a pas de recette magique, tu dois tester. Si la lecture byte par byte est très lente, tu peux passer par la lecture d'un tableau complet.
    Tu peux lire les deux premiers bytes tout seul. Ensuite, tu peux réutiliser toujours le même tableau de byte pour lire la suite du message.


    De plus, pour une bonne interprétation des informations par le client, dois-je aussi n'avoir qu'un Thread à son écoute et son écriture ( comme le serveur ) ?
    Tout dépend de ton protocole et de tes besoins. Si ton client est asynchrone (c'est le plus souvent le cas), il te faut deux Thread distincts : un pour l'envoi, l'autre pour la réception.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Serveur pour jeu Java
    Par Naililj dans le forum Java EE
    Réponses: 0
    Dernier message: 18/04/2015, 13h48
  2. Client-serveur pour jeu en ligne
    Par boubou_cs dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 09/05/2009, 17h33
  3. Choix du Serveur pour un jeu flash
    Par Velvounet dans le forum Jeux web
    Réponses: 5
    Dernier message: 08/08/2008, 22h26
  4. Serveur 1-N pour jeu de Black jack
    Par Salandar dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 24/02/2008, 08h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo