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.
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ço | Arquivo (exemplo) | Porta (exemplo) | Função |
|---|---|---|---|
| ConnectServer | ConnectServer.ini / ServerList.dat | 44405 (cliente) | Entrega a lista de servidores e roteia o cliente |
| JoinServer | JoinServer.ini / JoinServerConfig | 55970 (interna) | Valida sessão de login e sincroniza sessão entre GameServers |
| GameServer | GameServerInfo / GameServer.ini | 55901+ (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
- 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 pastaJoinServercom um arquivo de config). - Abra o arquivo de configuração em um editor de texto simples (Notepad++ é ideal — evita corromper encoding).
- 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.0noIPAddresspara escutar em todas as interfaces quando os GameServers estiverem em máquinas diferentes; use127.0.0.1se 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
JoinServerIPeJoinServerPortdevem ser exatamente o IP e a porta configurados no JoinServer.ServerCodedeve 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:
- No ConnectServer, confirme que a lista de servidores aponta para os IPs/portas de cliente corretos dos GameServers.
- Garanta que os
ServerCodeusados no ConnectServer, nos GameServers e na lista do JoinServer se refiram aos mesmos servidores. - 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.
- Libere a porta interna do JoinServer (ex.: 55970) para conexões vindas dos GameServers.
- 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.
- Libere também as portas de cliente dos GameServers e do ConnectServer, para o jogador conectar.
- 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
- Inicie os serviços na ordem correta e confirme, nos consoles, que cada GameServer reporta conexão bem-sucedida com o JoinServer.
- Entre com uma conta, veja a lista de servidores e conecte a um canal — o login deve completar sem travar no "conectando".
- Entre com duas contas em GameServers diferentes do mesmo mundo e tente formar party. Se funcionar, o cross-server está OK.
- Teste guild: crie/entre em uma guild e verifique se os membros aparecem ao trocar de canal.
- 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
| Sintoma | Causa provável | Solução |
|---|---|---|
| Trava no "conectando" após escolher servidor | GameServer não conecta ao JoinServer | Confirme IP/porta do JoinServer no GameServer e o serviço no ar |
| Party não funciona entre canais | GameServer fora da lista do JoinServer | Adicione o GameServer ao GameServerList com Code correto |
| Guild "some" ao trocar de canal | ServerCode inconsistente entre serviços | Alinhe o mesmo ServerCode em JoinServer, GameServer e ConnectServer |
| JoinServer não sobe | Porta em uso ou encoding do arquivo | Troque a porta ou salve o config em ANSI; cheque outro processo na porta |
| GameServer dá erro de conexão no boot | Ordem de inicialização errada | Suba JoinServer antes dos GameServers |
| Conecta local mas não pela internet | Porta bloqueada no firewall/VPS | Libere 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.