Come prosegue un gioco online dopo la partenza dell'host?

12

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?

    
posta Joey Adams 26.07.2011 - 05:25
fonte

2 risposte

20

Sembra perforazione UDP

Let A and B be the two hosts, each in its own private network; N1 and N2 are the two NAT devices; S is a public server with a well-known globally reachable IP address.

  1. A and B each begin a UDP conversation with S; the NAT devices N1 and N2 create UDP translation states and assign temporary external port numbers
  2. S relays these port numbers back to A and B
  3. A and B contact each others' NAT devices directly on the translated ports; the NAT devices use the previously created translation states and send the packets to A and B

In questo esempio, sei S. I tuoi avversari sono A e B. Quando sei cacciato dal gioco, i tuoi avversari possono continuare a giocare perché hanno negoziato una connessione l'uno con l'altro quando si sono connessi per la prima volta.

    
risposta data 26.07.2011 - 06:03
fonte
2

Se due programmi vogliono parlarsi, non è necessario essere un server e l'altro un client. Questo è un modello di networking, ma non l'unico. Un altro modello molto comune è il modello peer-to-peer , dove ognuno è sia un client che un server e chiunque può parlare con chiunque. Non so molto in particolare sugli interni di networking multiplayer di Starcraft, ma suppongo che molto probabilmente compia ciò che hai descritto usando un modello peer-to-peer.

    
risposta data 26.07.2011 - 05:34
fonte

Leggi altre domande sui tag