Nota: questa è una domanda sul networking, non sui giochi. Sto usando StarCraft solo come esempio.
Il gioco StarCraft (non StarCraft 2) supporta la riproduzione online. Una persona ospita e altre persone si uniscono. Se l'ospite lascia durante il gioco, il gioco può continuare indefinitamente senza l'host. Come funziona?
Considera il seguente scenario:
- Ospito un 3 contro 3. Si noti che, affinché le persone possano unirsi, il mio router deve essere configurato per il port forwarding 6112, TCP e UDP (vedere Supporto Blizzard ).
- Cinque persone si uniscono. Tutti (me compreso) sono dietro un router. Inizio il gioco.
- Tre minuti dopo il gioco, una ventina di fanatici si riversano nella mia base. Nessuno mi aiuta.
- La mia base viene eliminata, quindi parto (il gioco non ti dà una scelta).
- Il gioco continua senza l'host (la squadra di casa ha due giocatori rimasti).
Come restano collegati i restanti cinque client (che non hanno bisogno di inoltrare 6112)?
Se ho capito bene: se due programmi vogliono parlarsi, uno di loro deve essere un "server" e ascoltare le connessioni su una porta, mentre l'altro deve essere un "client" e iniziare una connessione richiesta su quel porto. Non possono semplicemente iniziare a inviare pacchetti l'un l'altro (e non so nemmeno come sarebbero, se entrambi sono dietro i router).
Qualcuno che ospita un gioco è un server, mentre quelli che lo uniscono sono clienti. È facile vedere come i client possono iniziare a comunicare con il server. Quello che non ottengo è: in che modo i client iniziano 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 passa attraverso i server Battle.net. StarCraft mantiene una connessione a Battle.net durante i giochi (per i messaggi di amici, ecc.). Tuttavia, dubito che il traffico del gioco lo attraversi, perché se fosse così, perché gli host avrebbero bisogno di port forwarding 6112?
La mia domanda è: può un server, con più client connessi ad esso, avviare le connessioni tra loro?