sexta-feira, 16 de novembro de 2018

Experiência servidor dedicado linux para teste de rede

Hoje fiz uma experiência interessante:
Objetivo: Criar um servidor de jogo em rede na Internet usando Unity.
Premissa: processo deverá rodar como serviço no linux sem modo gráfico.

Primeiro alterei meu projeto teste-rede feito no Unity para iniciar direto na cena do jogo (removendo as telas acessórias e os menus) e mudei o Network Manager pra iniciar em modo Server Dedicado.

Depois compilei pra linux e deram vários erros.

O primeiro erro foi falta de permissão. tive que mover a pasta do jogo pra dentro da pasta /opt/ e conceder permissão de execução.

Segundo erro foi "No such file or directory". Demorei pra descobrir que era por causa da arquitetura 32/64bits. Meu linux era de 64bits e o aplicativo x86 de 32bits.

Esta é a primeira dica:
Nas opções de Build selecionar arquitetura "x86 + x86_64 (Universal)".

Agora  devido a não ter modo gráfico no meu linux deram vários outros erros.
Até que eu descobri que existe uma opção:

Esta é a segunda dica:
Ainda nas opções de Build ativar a opção "Headless Mode". Cria um jogo para o uso em servidores, sem elementos visuais.

Após todo este trabalho, rodei o aplicativo e funcionou, mas ainda faltou deixar ele rodando como serviço.

Está é a terceira e última dica deste post:
# nohup ./application.x86_64 &
O comando do linux acima permite que você deixe a aplicação rodando em background e continue rodando após desconectar o terminal.

Atenção: para encerrar o processo você deverá usar o comando kill numero_do_processo.
Obs.: Para saber o número do processo você pode usar o comando # ps aux

O resultado da experiência foi um sucesso:
O jogo em rede funcionou com uma performance bem rasoável.
Não cheguei a medir o ping, mas visualmente estava abaixo de 100ms.