Hinweis: Dies ist eine Frage zum Netzwerk, nicht zum Spielen. Ich verwende StarCraft nur als Beispiel.
Das Spiel StarCraft (nicht StarCraft 2) unterstützt das Online-Spielen. Eine Person hostet und andere Personen schließen sich an. Wenn der Host während des Spiels verlässt, kann das Spiel ohne den Host auf unbestimmte Zeit fortgesetzt werden. Wie funktioniert das?
Stellen Sie sich das folgende Szenario vor:
- Damit Benutzer Mitglied werden können, muss mein Router für die Portweiterleitung von 6112, TCP und UDP konfiguriert sein (siehe Blizzard-Support ).
- Fünf Leute machen mit. Jeder (ich eingeschlossen) ist hinter einem Fräser. Ich starte das Spiel.
- Drei Minuten nach Spielbeginn strömen ungefähr zwanzig Eiferer in meine Basis. Niemand hilft mir.
- Meine Basis ist beseitigt, also gehe ich (das Spiel gibt dir keine Wahl).
- Das Spiel wird ohne den Gastgeber fortgesetzt (die Heimmannschaft hat noch zwei Spieler).
Wie bleiben die verbleibenden fünf Clients (die keine 6112-Weiterleitung benötigten) verbunden?
Wenn ich das richtig verstehe: Wenn zwei Programme miteinander kommunizieren möchten, muss eines ein "Server" sein und auf Verbindungen an einem Port warten, während das andere ein "Client" sein muss und eine Verbindungsanforderung dazu initiieren muss Hafen. Sie können nicht einfach anfangen, Pakete aneinander zu senden (und ich weiß nicht einmal, wie sie es tun würden, wenn beide sich hinter Routern befinden).
Jemand, der ein Spiel hostet, ist ein Server, während diejenigen, die sich ihm anschließen, Clients sind. Es ist leicht zu erkennen, wie die Clients mit dem Server kommunizieren können. Was ich nicht bekomme ist: Wie beginnen die Clients miteinander zu kommunizieren, ohne den Server zu durchlaufen? Ermöglicht das Internetprotokoll einem Server, Verbindungen zwischen Clients herzustellen?
Es ist durchaus möglich, dass im Falle von StarCraft der Spielverkehr über Battle.net-Server läuft. StarCraft unterhält während des Spiels eine Verbindung zum Battle.net (für Nachrichten von Freunden usw.). Ich bezweifle jedoch, dass der Spieledatenverkehr es durchläuft. Wenn ja, warum müssen Hosts dann den Port 6112 weiterleiten?
Meine Frage ist: Kann ein Server, an den mehrere Clients angeschlossen sind, Verbindungen zwischen ihnen herstellen?
quelle
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).
Anscheinend wird dies benötigt, um ein Spiel zu starten, damit Benutzer Sie finden können, aber nicht, um verbunden zu bleiben.Antworten:
Das klingt nach UDP Hole Punching
In diesem Beispiel sind Sie S. Ihre Gegner sind A und B. Wenn Sie aus dem Spiel geworfen werden, können Ihre Gegner weiterspielen, da sie bei der ersten Verbindung zu Ihnen eine Verbindung ausgehandelt haben.
quelle
Wenn zwei Programme miteinander kommunizieren möchten, muss eines kein Server und das andere kein Client sein. Das ist ein Modell der Vernetzung, aber nicht das einzige. Ein weiteres sehr verbreitetes Modell ist das Peer-to-Peer-Modell , bei dem jeder sowohl ein Client als auch ein Server ist und jeder mit jedem sprechen kann. Ich weiß nicht genau genug über die Starcraft Multiplayer-Netzwerk-Interna, aber ich vermute, dass es mit hoher Wahrscheinlichkeit das erreicht, was Sie mit einem Peer-to-Peer-Modell beschrieben haben.
quelle