Trabalho 4 - Sistemas Distribuídos

Data de entrega: 3/7

Um jogo distribuído (bem simples)

O objetivo desse trabalho é desenvolver, em Lua, um esqueleto de jogo distribuído onde a comunicação é feita através de um serviço de filas. A seguir descrevo as tecnologias propostas. Caso vc deseje usar alguma tecnologia alternativa, por favor mande email ou fale comigo para verificar se é possível.

O trabalho deve usar o servidor mosquitto, um servidor do protocolo MQTT, para mediar a comunicação entre programas desenvolvidos e Löve, um framework para o desenvolvimento de aplicações gráficas 2D interativas em Lua. A biblioteca lua_mqtt permite o uso do mqtt a partir de Lua.

Provavelmente algo que vai dar um pouco de trabalho é construir o ambiente de desenvolvimento mqtt+löve+lua_mqtt. Instale e teste cada uma das coisas separadamente antes de integrá-las.

O jogo em si pode ser bem simples. Cada jogador pode se movimentar pela tela com setinhas para a direita e esquerda e todos devem ver os demais se movimentando. Dois jogadores não podem ocupar a mesma posição (o canvas pode ser como um tabuleiro quadriculado e em cada momento cada jogador ocupa um dos quadrados pré-definidos). Você define o objetivo do jogo (pode ser "comer" itens disponíveis no tabuleiro, "matar" os demais jogadores ou outro qualquer).

Você pode definir que canais de comunicação (tópicos) o jogo usará e o que trafegará em cada um deles. É interessante que todos os movimentos trafeguem por um mesmo canal para criar uma visão comum ordenada dos movimentos dos diversos jogadores. Também recomendo que a comunicação descreva simplesmente o movimento do jogador (direita, esquerda, cima, baixo) e cada réplica do jogo compute localmente os impactos desse movimento.

Escalabilidade

O mqtt e servidor mosquitto certamente vão atender bem um jogo como o descrito acima, onde a informação enviada é pouca e o número de participantes tipicamente será pequeno. E como essas tecnologias se comportariam em um cenário com centenas de jogadores e onde a informação trocada fosse maior do que a de uma direção de movimento? Faça alguns testes com o servidor mosquitto procurando gerar uma medida de quantas mensagens ele consegue processar por segundo. (Para esses testes não é necessário usar o Löve, use apenas programas Lua e procure "sobrecarregar" uma fila.) Provavelmente será complicado gerar essa sobrecarga, mas tente utilizar diferentes máquinas, cada uma com muitos programas mandando dados, para ver se ocorre alguma degradação do serviço.

Questões de Ordem