Nota: Esta é uma pergunta sobre rede, não sobre jogos. Estou usando o StarCraft apenas como exemplo.
O jogo StarCraft (não StarCraft 2) suporta jogo online. Uma pessoa hospeda e outras pessoas entram. Se o host sair durante o jogo, o jogo poderá continuar indefinidamente sem o host. Como isso funciona?
Considere o seguinte cenário:
- Eu hospedo um 3 versus 3. Observe que, para que as pessoas possam participar, meu roteador precisa ser configurado para a porta 6112, TCP e UDP (consulte Suporte da Blizzard ).
- Cinco pessoas se juntam. Todos (inclusive eu) estão atrás de um roteador. Eu começo o jogo.
- Três minutos depois do jogo, cerca de vinte fanáticos caem na minha base. Ninguém me ajuda.
- Minha base é eliminada, então eu deixo (o jogo não lhe dá uma escolha).
- O jogo continua sem o anfitrião (a equipe da casa tem dois jogadores restantes).
Como os cinco clientes restantes (que não precisavam do 6112 encaminhado) permanecem conectados?
Se bem entendi: se dois programas querem conversar, um deles precisa ser um "servidor" e escutar as conexões em uma porta, enquanto o outro precisa ser um "cliente" e iniciar uma solicitação de conexão nesse porta. Eles não podem simplesmente começar a enviar pacotes um para o outro (e eu nem sei como eles fariam, se ambos estiverem atrás de roteadores).
Alguém que hospeda um jogo é um servidor, enquanto aqueles que se juntam a ele são clientes. É fácil ver como os clientes podem começar a se comunicar com o servidor. O que não entendo é: como os clientes começam a se comunicar sem passar pelo servidor? O Protocolo da Internet permite que um servidor inicie conexões entre clientes?
É perfeitamente possível que, no caso de StarCraft, o tráfego de jogos passe pelos servidores Battle.net. O StarCraft mantém uma conexão com o Battle.net durante os jogos (para mensagens de amigos etc.). No entanto, duvido que o tráfego do jogo passe por isso, porque se foi, por que os hosts precisariam portar 6112?
Minha pergunta é: um servidor, com vários clientes conectados a ele, pode iniciar conexões entre eles?
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).
Aparentemente, isso é necessário para iniciar um jogo para que os usuários possam encontrá-lo, mas não é necessário permanecer conectado.