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

Como configurar múltiplos GameServers (multi-canal) no MU Online

Suba vários GameServers (canais/sub-servidores) no seu MU Online: portas distintas, registro no ConnectServer e no JoinServer, banco de dados compartilhado e balanceamento de carga — com passo a passo, tabelas e checklist de lançamento.

BR Bruno · Atualizado em 22 set 2025 · ⏱ 16 min de leitura
Resposta rápida

Quando o seu servidor de MU Online começa a lotar, um único GameServer deixa de dar conta: lag em eventos, fila para entrar e travamentos em spots concorridos. A solução clássica é rodar vários GameServers — os "canais" ou sub-servidores que o jogador escolhe na lista de servidores. Bem configurado,

Quando o seu servidor de MU Online começa a lotar, um único GameServer deixa de dar conta: lag em eventos, fila para entrar e travamentos em spots concorridos. A solução clássica é rodar vários GameServers — os "canais" ou sub-servidores que o jogador escolhe na lista de servidores. Bem configurado, o multi-canal distribui a carga, cria espaços dedicados (um canal PVP, um canal de eventos) e escala junto com a sua base. Mal configurado, gera personagens duplicados, roteamento quebrado e canais que ninguém consegue acessar. Este tutorial cobre a arquitetura, as portas, o registro no ConnectServer e no JoinServer, o banco compartilhado e o balanceamento — com as variações mais comuns entre emuladores.

O que é um servidor multi-canal

Na arquitetura do MU, o cliente nunca fala direto com o GameServer no primeiro contato. O fluxo é: o cliente conecta no ConnectServer, recebe a lista de servidores (os canais), escolhe um, e só então é roteado para o GameServer daquele canal. Por trás, o JoinServer cuida do login/contas e o banco de dados guarda personagens e itens. Um servidor "multi-canal" é simplesmente vários processos de GameServer rodando ao mesmo tempo, cada um com sua porta e seu código, todos registrados no ConnectServer e compartilhando o mesmo banco. Para o jogador, cada GameServer é um "Canal 1", "Canal 2", "PVP" — e como o banco é o mesmo, o personagem é idêntico em qualquer um.

Por que ter vários GameServers

  • Distribuir carga: dividir 1000 jogadores em 3 canais de ~330 alivia CPU, memória e a rede de cada instância.
  • Reduzir lag em spots e eventos: menos gente por canal significa menos concorrência por mob e menos pacotes por segundo.
  • Canais temáticos: um canal marcado como "PVP" ou "Eventos" separa públicos sem precisar de outro servidor.
  • Manutenção sem derrubar tudo: você pode reiniciar um canal para aplicar um ajuste enquanto os outros seguem no ar.
  • Escala horizontal: quando um VPS satura, você move um canal para outra máquina apontando para o mesmo banco.

Pré-requisitos

  • Um servidor de MU já rodando com um GameServer, ConnectServer e JoinServer funcionais (veja o tutorial de criação de servidor).
  • Acesso aos arquivos de configuração de GameServer, ConnectServer e JoinServer.
  • O banco de dados (MSSQL na maioria dos emuladores) acessível por todas as instâncias.
  • Portas livres no firewall/roteador para cada canal.
  • Backup completo dos arquivos de config e do banco antes de qualquer alteração.

Arquivos e componentes envolvidos

Os nomes variam por emulador (IGCN, MuEMU, X-Team, Season 6). Os mais comuns:

ComponenteFunçãoExemplo de arquivo (varia por emulador)
GameServerProcessa o mundo de cada canalGameServerInfo.dat / GameServer.conf
ConnectServerEntrega a lista de servidores ao clienteServerList.dat / ConnectServer.conf
JoinServerLogin de contas e roteamentoJoinServerInfo.dat / JoinServer.conf
Banco de dadosPersonagens, itens, Zen (compartilhado)conexão ODBC MuOnline / Me_MuOnline

> Trate cada arquivo como crítico: um ServerCode ou porta duplicados derrubam o boot do canal afetado. Sempre edite cópias e teste um canal por vez.

Passo 1 — Planeje portas e ServerCodes

Antes de copiar nada, defina no papel a identidade de cada canal. Cada GameServer precisa de três coisas únicas: um ServerCode (número), uma porta de GameServer e um nome exibido na lista. Um plano típico para três canais:

CanalNome exibidoServerCodePorta GameServer
1Canal 1055901
2Canal 2155902
3PVP255903

O ConnectServer costuma escutar na porta 44405 e o JoinServer na 55970 (esses são exemplos — variam por emulador). O importante é que as portas de GameServer não colidam entre si e que cada uma esteja liberada no firewall.

Passo 2 — Duplique a pasta/config do GameServer

Cada canal é um processo próprio. Copie a pasta do GameServer (ou o conjunto de arquivos de config) uma vez por canal — por exemplo GameServer_C1, GameServer_C2, GameServer_C3. Mantendo pastas separadas você evita que dois canais briguem por logs, dumps e arquivos temporários, e consegue reiniciar um sem afetar os outros.

Passo 3 — Configure porta, código e nome de cada GameServer

Abra o arquivo de configuração de cada GameServer e ajuste os valores que precisam ser únicos. Em muitos emuladores o bloco é parecido com isto:

[GameServerInfo]
ServerName   = "Canal 1"
ServerCode   = 0
GameServerPort = 55901
; endereços dos serviços que este canal consome
JoinServerAddress = 127.0.0.1
JoinServerPort    = 55970
ConnectServerAddress = 127.0.0.1
ConnectServerPort    = 44405
; limite de jogadores deste canal (balanceamento)
MaxUserCount = 400

Repita para o Canal 2 (ServerCode = 1, GameServerPort = 55902, ServerName = "Canal 2") e para o Canal 3 (ServerCode = 2, GameServerPort = 55903, ServerName = "PVP"). O que muda por canal: ServerName, ServerCode, GameServerPort e opcionalmente MaxUserCount. O que permanece igual: os endereços do JoinServer, do ConnectServer e a conexão de banco.

Passo 4 — Registre os canais no ConnectServer

O ConnectServer é quem monta a lista que o jogador vê. Para cada GameServer, adicione uma entrada apontando ServerCode → IP:porta. O formato típico:

; ServerCode  Nome        IP           Porta
0            "Canal 1"    127.0.0.1    55901
1            "Canal 2"    127.0.0.1    55902
2            "PVP"        200.100.50.10 55903

Note que o IP pode ser diferente por canal: se o Canal 3 roda em outro VPS, use o IP público daquela máquina. Se todos estão na mesma máquina, use o IP local/loopback. O ServerCode aqui tem que bater com o ServerCode configurado no GameServer correspondente — é essa correspondência que faz o roteamento funcionar.

Passo 5 — Aponte o JoinServer e compartilhe o banco

O JoinServer valida a conta e encaminha o jogador. Em geral você tem um único JoinServer para todos os canais — confirme que ele conhece todos os ServerCodes e que sua conexão de banco aponta para o mesmo banco que os GameServers usam. Esse é o ponto mais importante do multi-canal: todos os GameServers e o JoinServer usam a mesma base (ex.: MuOnline + Me_MuOnline via ODBC). Assim, o personagem criado no Canal 1 já existe no Canal 2, com o mesmo inventário e Zen. Bancos separados = mundos separados (não é o objetivo aqui).

Passo 6 — Libere as portas no firewall

Cada porta de GameServer precisa estar acessível de fora. No Windows, libere as portas TCP no firewall; no VPS/roteador, faça o encaminhamento (port forward) de cada uma:

; TCP a liberar (exemplo)
44405   ; ConnectServer
55970   ; JoinServer
55901   ; GameServer Canal 1
55902   ; GameServer Canal 2
55903   ; GameServer PVP

Esquecer de liberar a porta de um canal é a causa nº 1 de "o canal aparece na lista mas dá erro ao entrar". O canal sobe localmente, mas o cliente não alcança a porta.

Passo 7 — Suba os serviços na ordem correta

A ordem de inicialização importa. Suba: 1) banco de dados, 2) JoinServer, 3) ConnectServer, 4) cada GameServer (Canal 1, depois 2, depois 3). Subir um GameServer antes do JoinServer/banco costuma gerar erro de conexão e o canal não registra. Ao subir cada GameServer, acompanhe o console: ele deve reportar "conectado ao JoinServer" e "registrado no ConnectServer".

Passo 8 — Teste o roteamento em jogo

  1. Abra o cliente e confirme que todos os canais aparecem na lista de servidores.
  2. Entre no Canal 1 com uma conta de teste, crie/mova um personagem, drope um item.
  3. Saia e entre no Canal 2 com a mesma conta — o personagem e o item devem estar lá (prova do banco compartilhado).
  4. Verifique o medidor de lotação de cada canal na lista.
  5. Force um canal (ex.: reinicie o Canal 3) e confirme que os outros continuam no ar.

Cuidados de balanceamento

Ter canais não basta — é preciso distribuir gente de forma saudável:

  • Defina MaxUserCount por canal de acordo com a capacidade da máquina, não com o ego. É melhor 3 canais de 350 estáveis do que 3 de 800 travando.
  • Monitore CPU/RAM por processo. Cada GameServer é um processo; se um satura antes dos outros, reduza seu limite ou mova-o de máquina.
  • Não deixe um canal virar "o único". Se todos entram no Canal 1, considere spawns de evento rotativos entre canais para espalhar a população.
  • Cuidado com eventos globais. Boss/evento que roda em todos os canais multiplica a carga simultaneamente — escalone horários se necessário.
  • Banco é o gargalo compartilhado. Muitos canais batendo no mesmo MSSQL exigem um banco bem dimensionado; monitore o tempo de resposta das queries.

Erros comuns e soluções

SintomaCausa provávelSolução
Canal não aparece na listaEntrada ausente/errada no ConnectServerConfira ServerCode, IP e porta no ConnectServer
Canal aparece mas dá erro ao entrarPorta do GameServer bloqueada no firewallLibere/encaminhe a porta TCP do canal
GameServer não sobePorta ou ServerCode duplicadosGaranta porta e código únicos por canal
Personagem some entre canaisBancos de dados diferentesAponte todos os GameServers ao mesmo banco
Erro de conexão no boot do canalJoinServer/banco fora do ar ou ordem erradaSuba banco → JoinServer → ConnectServer → GameServers
Todos entram só em um canalSem incentivo/limite por canalAjuste MaxUserCount e distribua eventos

Checklist de lançamento

  • Plano de portas e ServerCodes definido (todos únicos).
  • Config de cada GameServer com nome, código e porta próprios.
  • Todos os canais registrados no ConnectServer (ServerCode ↔ IP:porta batendo).
  • JoinServer conhecendo todos os canais e no mesmo banco.
  • Banco de dados compartilhado confirmado (personagem persiste entre canais).
  • Portas liberadas no firewall/roteador (ConnectServer, JoinServer e cada GameServer).
  • Serviços iniciados na ordem correta e consoles sem erro.
  • MaxUserCount definido por canal conforme a capacidade da máquina.
  • Teste in-game de roteamento e persistência entre canais concluído.
  • Backup dos arquivos de config e do banco salvo antes do público.

Com o multi-canal no ar, você tem uma base que escala junto com a comunidade: para adicionar o "Canal 4", basta repetir os passos com um novo ServerCode, uma nova porta e uma nova entrada no ConnectServer. Documente o par ServerCode:porta de cada canal em uma planilha — isso evita colisões e torna trivial mover um canal para outra máquina quando a população crescer.

Perguntas frequentes

Cada GameServer precisa de um banco de dados separado?

Não. O padrão é o oposto: todos os GameServers apontam para o MESMO banco (MuOnline/Me_MuOnline), para que o personagem, o inventário e o Zen sejam idênticos em qualquer canal. Banco separado só faz sentido se você quer mundos independentes, o que é outro projeto.

Quantos GameServers eu consigo rodar em uma máquina?

Depende de CPU, RAM e do limite de conexões que você define por canal. Um servidor médio roda de 2 a 4 canais confortavelmente em um VPS decente. Cada GameServer é um processo próprio consumindo memória e CPU — monitore antes de multiplicar canais.

Os jogadores veem os canais como servidores diferentes?

Na lista do ConnectServer, sim: cada GameServer aparece como uma entrada (Canal 1, Canal 2, PVP, etc.) com seu próprio medidor de lotação. Como o banco é compartilhado, o mesmo personagem entra em qualquer um deles.

Preciso de portas diferentes para cada GameServer?

Sim, obrigatoriamente. Cada GameServer escuta em uma porta TCP própria (ex.: 55901, 55902, 55903) e tem um ServerCode único. Duas instâncias na mesma porta causam conflito e uma delas não sobe.

Posso ter GameServers em máquinas (VPS) diferentes?

Sim. Basta que todos alcancem o mesmo banco de dados e que o ConnectServer aponte para o IP público correto de cada um. É assim que servidores grandes distribuem carga — cada canal em uma máquina, com um banco central.

O que é o ServerCode e por que ele tem que ser único?

É o identificador numérico do GameServer usado pelo ConnectServer e pelo JoinServer para rotear o jogador ao canal certo. Dois GameServers com o mesmo ServerCode se confundem no roteamento — cada canal precisa do seu número exclusivo.

BR
Editor de eventos, mapas e itens

Bruno é especialista em eventos, mapas, bosses e economia de itens do MU Online. Documenta cada detalhe com base em jogo real.

Continue lendo

Artigos relacionados