Nota: questa è una domanda sulla rete, non sui giochi. Sto usando StarCraft solo come esempio.
Il gioco StarCraft (non StarCraft 2) supporta il gioco online. Una persona ospita e altre persone si uniscono. Se l'host esce durante il gioco, il gioco può continuare indefinitamente senza l'host. Come funziona?
Considera il seguente scenario:
- Ospito un 3 contro 3. Nota che, affinché le persone possano unirsi, il mio router deve essere configurato per il port forward 6112, TCP e UDP (vedi Supporto Blizzard ).
- Cinque persone si uniscono. Tutti (me compreso) sono dietro un router. Inizio il gioco.
- Tre minuti dall'inizio della partita, una ventina di fanatici si riversano nella mia base. Nessuno mi aiuta.
- La mia base viene eliminata, quindi me ne vado (il gioco non ti dà scelta).
- Il gioco continua senza l'host (la squadra di casa ha due giocatori rimasti).
Come restano connessi i restanti cinque client (che non avevano bisogno del 6112 inoltrato)?
Se ho capito bene: se due programmi vogliono parlare tra loro, uno di essi deve essere un "server" e ascoltare le connessioni su una porta, mentre l'altro deve essere un "client" e avviare una richiesta di connessione su quel porta. Non possono semplicemente iniziare a inviare pacchetti l'un l'altro (e non so nemmeno come farebbero, se entrambi fossero dietro i router).
Qualcuno che ospita un gioco è un server, mentre quelli che lo partecipano sono client. È facile vedere come i client possono iniziare a comunicare con il server. Quello che non capisco è: come fanno i client a comunicare tra loro senza passare attraverso il server? Il protocollo Internet consente a un server di avviare connessioni tra client?
È del tutto possibile che, nel caso di StarCraft, il traffico di gioco passi attraverso i server Battle.net. StarCraft mantiene una connessione a Battle.net durante i giochi (per messaggi di amici, ecc.). Tuttavia, dubito che il traffico di gioco lo attraversi, perché in caso affermativo, perché gli host dovrebbero eseguire il port forward del 6112?
La mia domanda è: un server, con più client connessi ad esso, può avviare connessioni tra di loro?
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).
Apparentemente questo è necessario per iniziare un gioco in modo che gli utenti possano trovarti, ma non è necessario rimanere connessi.