Forum Programmation.c Trouver des serveurs

Posté par  .
Étiquettes : aucune
0
13
août
2004
Dans pas mal de jeux ou d'autres applications réseau, on peut facilement obtenir une liste des serveurs actifs. Pour l'instant, j'update une liste d'ip sur mon ftp et je note son adresse dans un fichier de conf pour y accéder, mais ça ne me satisfait pas du tout : pas propre, pas sécurisé, pas évolutif... Comment ce genre de 'détection' se programme ?
  • # serveur central

    Posté par  . Évalué à 3.

    je pense que dans quelques jeux, c'est un serveur central qui garde une liste d'adresse des serveurs officiels de jeu, et qui la met à jour (juste les ip, le nombre de joueur, map en cours, etc, ca vient direct du serveur)

    c'est possible ca comme explication ?
    • [^] # Re: serveur central

      Posté par  . Évalué à 1.

      C'est ce que j'ai commencé à faire, mais un changement de serveur central peut devenir génant...
      • [^] # Re: serveur central

        Posté par  . Évalué à 3.

        d'ou la bonne idée d'implémenter des mises à jour de logiciel à distance (à la demande de l'user. le prog va voir si ya une nouvelle version, il le signale à l'utilisateur, qui clique sur ok, que ca d/l la nouvelle version, décompresse, copie, se redémarre avec la nouvelle version)

        ca peut etre sympa, mais pitet un peu lourd juste pour maj un fichier qui contient l'url du serveur :D
        • [^] # Re: serveur central

          Posté par  (site web personnel) . Évalué à 3.

          Et la màj il va la chercher où ? Sur un serveur central...ça revient au même.

          Pourquoi ne pas utiliser un DNS qui peut changer facilement, genre DynDNS, No-IP ou FreeDNS (je suppose qu'il y a moyen de se passer d'eux pour ça mais c'est probablement le plus facile) ? Tu gardes un serveur central mais son adresse IP peut changer facilement sans problème. Une autre idée est d'utiliser un chan IRC sur un serveur publique comme le fait netPanzer. Evidemment faut pas changer de chan ni de réseau IRC (comme l'a fait netPanzer aussi)...

          Si tu veux vraiment décentraliser, doit y avoir moyen aussi. Essai de voir comment fonctionnent les réseaux P2P et d'appliquer...

          pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

          • [^] # Re: serveur central

            Posté par  . Évalué à 3.

            Je fais plus ou moins partie des dev de netpanzer et le choix d'un chan irc n'est clairement pas un bonne idée. Ça a été implementé en attendant une meilleurs solution, qui est en cours de dev.

            L'utilisation d'irc pose des problème. Par exemple on a été viré de freenode car l'usage des bot n'y est pas bien vu. Pour la p'tite histoire un admin de freenode est passé sur le chan, a essayé de disctuter avec les clients netpanzer connectés. Quand il s'est rendu compte que c'était des bots, il a kické tout le monde :/ On a bougé vers quakenet, mais bon, l'irc c'est fait pour discuter, pas pour servir de meta serveur.

            Si tu veux, passe sur #netpanzer sur freenode et demande à MatzeB, c'est lui qui est en train de dev le nouveau système de meta serveur.
            • [^] # Re: serveur central

              Posté par  (site web personnel) . Évalué à 2.

              Je pense que l'utilisation d'IRC n'est pas une mauvaise idée en soit: ça doit permettre notamment de répartir la charge "naturellement" puisqu'IRC permet l'utilisation de plusieurs serveurs et par rapport à un serveur web ça permet de mettre la liste des serveurs à jour sans avoir à établir une nouvelle connexion à chaque fois. Suffit de mettre la liste des meta serveurs (IRC) sur un meta meta serveur (HTTP) et d'en choisir un au hasard, de là on peut récupérer la liste des serveurs/joueurs avec les màj en continu. Je pense qu'un tel réseau serait plus solide qu'avec un serveur web centralisé unique.

              Evidemment c'est clair qu'il vaut mieux que les admins du réseau IRC concerné soient d'accords mais pourquoi ne pas monter son propre réseau IRC dédié à cela plutôt que de s'amuser à réinventer un nouveau protocol ?

              Au fait, c'est moi ou ya jamais personne sur le meta serveur netPanzer ? :)

              pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

              • [^] # Re: serveur central

                Posté par  . Évalué à 2.

                Ya jamais personne. On n'a pas sorti de nouvelle version depuis un moment et ya de moins en moins de joueurs :/
        • [^] # Re: serveur central

          Posté par  (site web personnel) . Évalué à 3.

          Et je pense que la màj du logiciel proprement dit doit plutôt se faire au niveau de l'OS (cf apt, urpmi,...) plutôt que par application mais c'est totalement hors sujet.

          pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

        • [^] # Re: serveur central

          Posté par  . Évalué à 2.

          d'ou la bonne idée d'implémenter des mises à jour de logiciel à distance
          Attention je crois que c'est breveté :P

          Je me demandais, c'est pitêtre pas super intelligent, mais comme à priori c'est juste un fichier à lire : le faire via AFS avec authentification Kerberos?
          Avec les ACL quivontbien, c'est sécurisé... Plusieurs sites/serveurs ? Plusieurs répertoires dans le cache AFS...

          Mais c'est peut-etre utiliser la grosse artillerie pour pas grand chose...
  • # systeme decentralisé

    Posté par  (site web personnel) . Évalué à 3.

    - chaque serveur possede sa liste de serveur ( eventuellement crytpée )
    - chaque serveur renvoi sa liste quand on lui demande
    - chaque serveur demande regulierement aux autres serveurs leurs listes

    il me semble que les serveurs emule fonctionne comme ca

    sinon on peut voir un systeme "a la DNS" avec un fichier liste auquel ont attribu un "numero de serie" qui s'incremente a chaque modif, les serveurs interrogant regulierement les autres pour obtenir la derniere version.
    • [^] # Re: systeme decentralisé

      Posté par  . Évalué à 1.

      Merci beaucoup pour votre aide, je pense que je vais procéder comme suis :
      Pour l'initialisation du système, un serveur public est déclaré (genre DynDNS).
      Chaque fois qu'un client se connecte, il envoie aussi la liste des serveurs qu'il connait à celui auquel il se connecte.
      Le serveur lui envoie aussi une liste de serveurs.
      Régulièrement, un serveur questionne tous les serveurs de sa liste pour compléter la sienne et les leurs.
      Résultat :
      * Pour peu qu'un client ait une IP serveur valable, il peut en trouver plein d'autres.
      * Globalement, au bout d'un certain temps, les serveurs devraient tous se synchroniser et avoir plus ou moins la même liste.
      • [^] # Re: systeme decentralisé

        Posté par  (site web personnel) . Évalué à 2.

        Je pense que si tu fais ça comme ça il y a un risque que les IP des serveurs qui n'existent plus ne soient jamais effacés, ou que ça prenne beaucoup de temps pour que ça soit le cas. Il faudrait aussi que les serveurs (et les clients) vérifient chacunes des nouvelles adresses qu'ils reçoivent, ce qui peut prendre relativement beaucoup de temps, surtout si la liste est "bien" faite (longue et avec des IP qui ne vont pas répondre et donc besoin d'attendre le timeout à chaque fois par exemple). Tu peux évidemment ne vérifier que quelques adresses de manière aléatoire ou refuser de télécharger plus de X adresses à la fois mais alors ta liste est moins rapidement à jours.

        Pour l'idée du serial comme pour les DNS, ça impliquerait qu'il y ai un serveur maitre unique pour qu'on ne se retrouve pas avec le même serial pour deux listes différentes. Pas vraiment une bonne idée à mon avis.

        Quand j'y pense je me dis qu'un réseau IRC c'est encore la moins mauvaise solution si tu veux une liste fiable et à jour:
        Le client télécharge une liste de meta serveurs IRC (ça peut se faire en une seule requète DNS) et se connecte à l'un d'eux aléatoirement puis rejoint un chan prédéfini. Un bot lui donne la liste des serveurs de jeux connus à son arrivée sur le chan. Quand un client se connecte à un serveur, il quitte le chan (et éventuellement le serveur). Quand un serveur est crée, il se connecte aussi au réseau IRC, rejoint un autre chan et signale aux bots des meta serveurs qu'il est un serveur. Un des meta serveurs vérifie qu'il y a bien un serveur à son adresse. Si c'est pas le cas, il kick le serveur du réseau. Si c'est le cas, il l'annonce sur le chan des joueurs, tout le monde met sa liste à jour et le serveur rejoint le chan des joueurs. Quand un serveur se déconnecte, tout le monde le retire de sa liste. Si un client n'arrive pas à se connecter à un des serveurs, il l'annonce sur un troisième chan et si ça n'a pas été fait depuis X secondes, un des bots vérifie l'état du serveur (réponse au client uniquement si le serveur existe, kick du serveur sinon).

        Je crois que c'est la meilleure manière d'avoir une liste fiable vraiment à jours en consommant un minimum de bande passante pour tout le monde sans s'amuser à réecrire un protocole complet (je veux dire en utilisant directement TCP ou UDP). Enfin je ne connais pas vraiment le protocol IRC non plus donc il y a peut-être quelque chose qui m'échappe qui rende mon idée totalement inefficace.

        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.