Remarque: il s'agit d'une question de réseautage, pas de jeu. J'utilise StarCraft uniquement à titre d'exemple.
Le jeu StarCraft (pas StarCraft 2) prend en charge le jeu en ligne. Une personne héberge et d'autres personnes se joignent. Si l'hôte part pendant le jeu, le jeu peut se poursuivre indéfiniment sans l'hôte. Comment ça marche?
Considérez le scénario suivant:
- J'héberge un 3 contre 3. Notez que, pour que les gens puissent se joindre, mon routeur doit être configuré pour rediriger le port 6112, TCP et UDP (voir Support Blizzard ).
- Cinq personnes se joignent. Tout le monde (moi y compris) est derrière un routeur. Je commence le jeu.
- Après trois minutes de jeu, une vingtaine de fanatiques se déversent dans ma base. Personne ne m'aide.
- Ma base est éliminée, donc je pars (le jeu ne vous laisse pas le choix).
- Le jeu se poursuit sans l'hôte (l'équipe à domicile n'a plus que deux joueurs).
Comment les cinq clients restants (qui n'avaient pas besoin du renvoi 6112) restent-ils connectés?
Si je comprends bien: si deux programmes veulent se parler, l'un d'eux doit être un "serveur" et écouter les connexions sur un port, tandis que l'autre doit être un "client" et lancer une demande de connexion sur ce Port. Ils ne peuvent pas simplement commencer à s'envoyer des paquets (et je ne sais même pas comment ils le feraient, si les deux sont derrière des routeurs).
Quelqu'un qui héberge un jeu est un serveur, tandis que ceux qui le rejoignent sont des clients. Il est facile de voir comment les clients peuvent commencer à communiquer avec le serveur. Ce que je ne comprends pas, c'est: comment les clients commencent-ils à communiquer entre eux sans passer par le serveur? Le protocole Internet autorise-t-il un serveur à établir des connexions entre des clients?
Il est tout à fait possible que, dans le cas de StarCraft, le trafic de jeu passe par les serveurs Battle.net. StarCraft maintient une connexion à Battle.net pendant les parties (pour les messages d'amis, etc.). Cependant, je doute que le trafic de jeu le traverse, car si c'était le cas, pourquoi les hôtes auraient-ils besoin de transférer 6112?
Ma question est: un serveur, avec plusieurs clients connectés, peut-il établir des connexions entre eux?
la source
I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).
Apparemment, cela est nécessaire pour démarrer un jeu afin que les utilisateurs puissent vous trouver, mais pas obligé de rester connecté.Réponses:
Cela ressemble à la perforation UDP
Dans cet exemple, vous êtes S. Vos adversaires sont A et B. Lorsque vous êtes exclu du jeu, vos adversaires peuvent continuer à jouer car ils avaient négocié une connexion les uns avec les autres lors de leur première connexion avec vous.
la source
Si deux programmes veulent se parler, l'un n'a pas besoin d'être un serveur et l'autre un client. C'est un modèle de réseautage, mais pas le seul. Un autre modèle très courant est le modèle peer-to-peer , où tout le monde est à la fois un client et un serveur et n'importe qui peut parler à n'importe qui. Je ne sais pas trop précisément sur les internes de réseau multijoueur de Starcraft, mais je suppose que cela accomplit très probablement ce que vous avez décrit en utilisant un modèle peer-to-peer.
la source