O maior portal de MU Online do Brasil — desde 2003
Tutorial Avançado Servidor

Como configurar o JoinServer no seu servidor de MU Online

Entenda e configure o JoinServer do seu servidor de MU Online: o papel dele em party, guild e eventos cross-server, a definição de porta, o registro dos GameServers e a ligação correta entre JoinServer, GameServer e ConnectServer — com testes e solução de erros.

GA Gabriel · Atualizado em 1 dez 2025 · ⏱ 14 min de leitura
Resposta rápida

O JoinServer é uma das peças mais mal compreendidas de um servidor de MU Online — e, não por acaso, uma das que mais causa dor de cabeça quando algo "quase funciona": o jogador loga, vê a lista de servidores, escolhe um canal, mas trava no "conectando" ou entra sem conseguir formar party com quem es

O JoinServer é uma das peças mais mal compreendidas de um servidor de MU Online — e, não por acaso, uma das que mais causa dor de cabeça quando algo "quase funciona": o jogador loga, vê a lista de servidores, escolhe um canal, mas trava no "conectando" ou entra sem conseguir formar party com quem está em outro GameServer. Esse serviço é o intermediário que valida a sessão de login e costura a comunicação entre os vários GameServers de um mesmo mundo. Configurado certo, ele é invisível; configurado errado, ele derruba party, guild e eventos cross-server sem dar um erro claro. Este tutorial explica o papel do JoinServer, como configurá-lo, como ligá-lo ao GameServer e ao ConnectServer, e como testar cada ponta.

O que é o JoinServer

No fluxo de conexão do MU Online há três serviços de retaguarda que o jogador nunca vê diretamente, mas dos quais tudo depende: ConnectServer, JoinServer e GameServer (além do banco de dados). O JoinServer fica no meio dessa cadeia. Sua função central é validar a sessão de login — quando o jogador autentica a conta, é o JoinServer que confirma que aquela sessão é válida e a mantém coerente enquanto o jogador transita pelo mundo. Além disso, ele centraliza dados de sessão que precisam ser vistos por mais de um GameServer ao mesmo tempo.

É essa centralização que dá ao JoinServer o papel "cross-server": como todos os GameServers de um mesmo mundo apontam para o mesmo JoinServer, informações como party, guild e certos eventos conseguem ser reconhecidas entre canais diferentes. Sem ele, cada GameServer seria uma ilha isolada.

O papel do JoinServer em party, guild e eventos

Vale detalhar por que tanta coisa depende dele:

  • Party entre canais: quando dois jogadores estão em GameServers distintos do mesmo mundo, é o JoinServer que reconhece a sessão de ambos e permite que a party seja formada e mantida.
  • Guild e alianças: dados de guild consultados por diferentes GameServers passam por essa camada de sessão; se o JoinServer não estiver alinhado, membros "somem" da guild ao trocar de canal.
  • Eventos cross-server: eventos que reúnem jogadores de canais diferentes (dependendo do emulador) usam a coerência de sessão do JoinServer para saber quem é quem.
  • Estabilidade da sessão: ele evita sessões duplicadas e ajuda a derrubar logins fantasma, mantendo a base de "quem está online" coerente.

> Regra de ouro: se um recurso funciona dentro de um GameServer mas quebra entre GameServers, o JoinServer (ou a rota até ele) é o primeiro lugar para investigar.

Pré-requisitos

  • Servidor de MU já instalado e rodando localmente ou em VPS (veja o tutorial de criação de servidor).
  • Acesso aos arquivos de configuração do JoinServer, do GameServer e do ConnectServer.
  • O IP da máquina onde o JoinServer vai rodar (127.0.0.1 se for tudo local; IP interno/externo se for distribuído).
  • Permissão para liberar portas no firewall da máquina/VPS.
  • Backup dos arquivos de configuração antes de qualquer alteração.

Arquivos e portas envolvidos

Os nomes de arquivo e as portas variam por emulador (IGCN, MuEMU, X-Team e derivados). Trate os valores abaixo como exemplos e confira sempre o padrão do seu MuServer:

ServiçoArquivo (exemplo)Porta (exemplo)Função
ConnectServerConnectServer.ini / ServerList.dat44405 (cliente)Entrega a lista de servidores e roteia o cliente
JoinServerJoinServer.ini / JoinServerConfig55970 (interna)Valida sessão de login e sincroniza sessão entre GameServers
GameServerGameServerInfo / GameServer.ini55901+ (cliente)Executa o mundo de jogo; conecta ao JoinServer

A porta do JoinServer é quase sempre uma porta interna, usada na conversa entre JoinServer e GameServer — não é a porta em que o cliente do jogo conecta. Isso é fonte constante de confusão: liberar só a porta do cliente e esquecer a interna faz o servidor "subir" mas os GameServers não conversarem com o JoinServer.

Passo 1 — Localizar e abrir a configuração do JoinServer

  1. Vá até a pasta do seu MuServer e localize o executável e o arquivo de configuração do JoinServer (algo como JoinServer.exe + JoinServer.ini, ou uma pasta JoinServer com um arquivo de config).
  2. Abra o arquivo de configuração em um editor de texto simples (Notepad++ é ideal — evita corromper encoding).
  3. Identifique as chaves principais: porta de escuta, IP de bind e a lista/registro de GameServers que esse JoinServer vai atender.

Nem todo emulador expõe as três coisas no mesmo arquivo — em alguns, a lista de GameServers fica em um arquivo separado (ServerList/GameServerList). Anote onde cada uma está.

Passo 2 — Definir a porta e o IP de escuta

No arquivo do JoinServer, defina a porta interna e o IP de bind. Um bloco típico se parece com isto (o formato exato varia por emulador):

[JoinServer]
; IP em que o JoinServer escuta. 0.0.0.0 = todas as interfaces
IPAddress = 0.0.0.0
; Porta interna usada pelos GameServers para conectar
Port = 55970
; Conexão com o banco de dados de contas
DBServer = 127.0.0.1
DBName = MuOnline
  • Use 0.0.0.0 no IPAddress para escutar em todas as interfaces quando os GameServers estiverem em máquinas diferentes; use 127.0.0.1 se for tudo local.
  • Anote a Port — ela precisará ser idêntica na configuração de cada GameServer.
  • Confirme os dados de banco: o JoinServer normalmente também toca a base de contas para validar sessão.

Salve o arquivo mantendo o encoding original (geralmente ANSI). Salvar como UTF-8 com BOM pode impedir o serviço de subir.

Passo 3 — Registrar os GameServers no JoinServer

Aqui mora o segredo do cross-server. O JoinServer precisa saber quais GameServers ele atende. Em muitos emuladores há uma lista assim:

[GameServerList]
; Code = IP : Porta
0 = 127.0.0.1:55901
1 = 127.0.0.1:55902
2 = 127.0.0.1:55903
  • Cada linha corresponde a um GameServer (canal) do mesmo mundo.
  • O Code aqui precisa bater com o código de servidor definido dentro de cada GameServer.
  • Para party e guild funcionarem entre canais, todos os GameServers que devem compartilhar sessão precisam estar nesta lista, apontando para o mesmo JoinServer.

Se um GameServer não estiver listado (ou estiver com IP/porta errados), ele até sobe, mas fica "surdo" para o resto do mundo — jogadores nele não formam party com os demais.

Passo 4 — Apontar cada GameServer para o JoinServer

Agora feche o ciclo do outro lado. Na configuração de cada GameServer, localize as chaves que apontam para o JoinServer e alinhe-as com o Passo 2:

[GameServerInfo]
ServerCode = 0
; Endereço do JoinServer (mesma máquina ou IP interno)
JoinServerIP = 127.0.0.1
JoinServerPort = 55970
  • JoinServerIP e JoinServerPort devem ser exatamente o IP e a porta configurados no JoinServer.
  • ServerCode deve corresponder ao Code registrado na lista do JoinServer (Passo 3).
  • Repita para todos os GameServers, mudando apenas o ServerCode (e a porta do cliente de cada um).

Esse é o erro mais comum de todos: um GameServer apontando para porta ou IP diferente do JoinServer. Ele funciona isolado, mas quebra tudo que é cross-server.

Passo 5 — Ligar ao ConnectServer

O ConnectServer é a porta de entrada do cliente: ele mostra a lista de servidores e encaminha o jogador ao GameServer escolhido. O JoinServer não conversa diretamente com o cliente, mas a cadeia só fica coerente se os três estiverem alinhados:

  1. No ConnectServer, confirme que a lista de servidores aponta para os IPs/portas de cliente corretos dos GameServers.
  2. Garanta que os ServerCode usados no ConnectServer, nos GameServers e na lista do JoinServer se refiram aos mesmos servidores.
  3. Ordem de inicialização recomendada: banco de dados → JoinServer → GameServers → ConnectServer. Subir o GameServer antes do JoinServer costuma gerar erro de conexão no boot.

Passo 6 — Liberar portas no firewall

Mesmo com tudo certo nos arquivos, o firewall pode bloquear a conversa interna.

  1. Libere a porta interna do JoinServer (ex.: 55970) para conexões vindas dos GameServers.
  2. Se JoinServer e GameServers estiverem em máquinas diferentes, libere a porta no firewall de entrada da máquina do JoinServer e garanta rota entre elas.
  3. Libere também as portas de cliente dos GameServers e do ConnectServer, para o jogador conectar.
  4. Em VPS, lembre-se de que pode haver um firewall no painel do provedor além do firewall do Windows.

Passo 7 — Testar a cadeia completa

  1. Inicie os serviços na ordem correta e confirme, nos consoles, que cada GameServer reporta conexão bem-sucedida com o JoinServer.
  2. Entre com uma conta, veja a lista de servidores e conecte a um canal — o login deve completar sem travar no "conectando".
  3. Entre com duas contas em GameServers diferentes do mesmo mundo e tente formar party. Se funcionar, o cross-server está OK.
  4. Teste guild: crie/entre em uma guild e verifique se os membros aparecem ao trocar de canal.
  5. Deixe o servidor rodando alguns minutos e observe se há desconexões ou reconexões estranhas nos logs do JoinServer.

Erros comuns e soluções

SintomaCausa provávelSolução
Trava no "conectando" após escolher servidorGameServer não conecta ao JoinServerConfirme IP/porta do JoinServer no GameServer e o serviço no ar
Party não funciona entre canaisGameServer fora da lista do JoinServerAdicione o GameServer ao GameServerList com Code correto
Guild "some" ao trocar de canalServerCode inconsistente entre serviçosAlinhe o mesmo ServerCode em JoinServer, GameServer e ConnectServer
JoinServer não sobePorta em uso ou encoding do arquivoTroque a porta ou salve o config em ANSI; cheque outro processo na porta
GameServer dá erro de conexão no bootOrdem de inicialização erradaSuba JoinServer antes dos GameServers
Conecta local mas não pela internetPorta bloqueada no firewall/VPSLibere a porta interna e as de cliente no firewall do SO e do provedor

Boas práticas de operação

  • Documente o mapa de portas (JoinServer, cada GameServer, ConnectServer) em uma planilha — economiza horas de depuração futura.
  • Mantenha a lista de GameServers sincronizada sempre que adicionar um canal novo: registre no JoinServer, no ConnectServer e ajuste o ServerCode.
  • Monitore os logs do JoinServer — quedas repetidas de conexão de um GameServer indicam rede, firewall ou porta em conflito.
  • Faça backup dos configs antes de cada alteração; um caractere errado derruba o serviço no boot.

Checklist de configuração

  • Porta e IP de escuta do JoinServer definidos e anotados.
  • Todos os GameServers do mundo registrados na lista do JoinServer.
  • Cada GameServer apontando para o IP/porta corretos do JoinServer.
  • ServerCode consistente entre JoinServer, GameServers e ConnectServer.
  • ConnectServer com a lista de servidores correta.
  • Portas liberadas no firewall do SO e do provedor (se VPS).
  • Ordem de boot respeitada (DB → JoinServer → GameServers → ConnectServer).
  • Party e guild testados entre GameServers diferentes.

Com o JoinServer alinhado, você tem a espinha dorsal de sessão do seu mundo funcionando — e a base para escalar. O próximo passo natural é adicionar novos GameServers (canais) reutilizando exatamente este mesmo mapa: registrar o canal na lista do JoinServer, apontar o novo GameServer para a mesma porta interna e replicar o ServerCode na cadeia. Feito uma vez com cuidado, expandir vira rotina.

Perguntas frequentes

O que exatamente o JoinServer faz?

Ele é o serviço intermediário que valida o login do jogador entre a conta e o mundo de jogo, mantém a sessão ativa e coordena informações que cruzam GameServers, como party, guild e alguns eventos cross-server. Sem ele no ar, o jogador chega ao ConnectServer mas não consegue entrar de fato no mundo.

O JoinServer é o mesmo que o ConnectServer?

Não. O ConnectServer entrega a lista de servidores e roteia o cliente para o GameServer certo; o JoinServer valida a sessão de login e sincroniza dados de sessão entre os GameServers. Eles trabalham juntos, mas são serviços distintos, com portas e funções diferentes.

Qual porta o JoinServer usa?

Varia por emulador. Um valor comum é a porta 55970 (interna, entre JoinServer e GameServer), mas cada emulador (IGCN, MuEMU, X-Team) tem seu padrão. O importante é que a porta configurada no JoinServer seja exatamente a mesma apontada em cada GameServer.

Preciso de um JoinServer por GameServer?

Não. Um único JoinServer normalmente atende vários GameServers do mesmo mundo, e é justamente isso que permite party e guild funcionarem entre canais/servidores. Cada GameServer aponta para o mesmo JoinServer pelo IP e porta.

Party e guild não funcionam entre servidores — pode ser o JoinServer?

Sim, é a suspeita número um. Se dois GameServers não compartilham party/guild, quase sempre um deles está apontando para um JoinServer diferente, para uma porta errada, ou o JoinServer está com a lista de GameServers incompleta. Alinhe IP, porta e a lista de servidores.

Posso rodar o JoinServer em outra máquina?

Pode, desde que a porta esteja liberada no firewall e os GameServers apontem para o IP correto da máquina do JoinServer. Em servidores maiores isso é comum para distribuir carga, mas exige atenção redobrada com rede e latência interna.

GA
Editor de guias e builds

Gabriel cobre gameplay, builds de classes, PvP e progressão. Testa cada estratégia em servidor antes de publicar.

Continue lendo

Artigos relacionados