Programação de jogos MMO com DALua

19
Programação de jogos MMO com DALua Ricardo Costa

description

Programação de jogos MMO com DALua. Ricardo Costa. Sumário. Biblioteca DALua Projeto de jogo MMORPG Ferramenta de Testes Resultados dos Testes Conclusão. Biblioteca DALua. Camada de abstração sobre o ALua 6.0 ALua : sistema de comunicação assíncrona entre processos - PowerPoint PPT Presentation

Transcript of Programação de jogos MMO com DALua

Page 1: Programação de jogos MMO com  DALua

Programação de jogos MMO com DALua

Ricardo Costa

Page 2: Programação de jogos MMO com  DALua

Sumário Biblioteca DALua Projeto de jogo MMORPG Ferramenta de Testes Resultados dos Testes Conclusão

Page 3: Programação de jogos MMO com  DALua

Biblioteca DALua Camada de abstração sobre o ALua 6.0

ALua: sistema de comunicação assíncrona entre processos

Fornece várias facilidades para a implementação de sistemas distribuídos

Contém módulos especializados: dalua dalua.app dalua.causal dalua.events dalua.mutex dalua.timer dalua.total

Page 4: Programação de jogos MMO com  DALua

Biblioteca DALua Cada máquina pode executar vários processos

DALua Os processos são identificados por uma string

única (ex.: “[email protected]”) A rede DALua é totalmente conectada (não há

roteamento) É possível comunicar-se com processos que

não usam DALua através de canais TCP

Page 5: Programação de jogos MMO com  DALua

Módulo dalua Envio de mensagens

dalua.send(dest_procs, nome_func, arg1, arg2, ...) Cada mensagem é uma chamada de função remota dest_procs pode ser um ou mais identificadores de

processo Argumentos podem ser number, string, boolean, table

ou function Retorna um identificador único para a chamada

dalua.acksend Processos destinatários enviam uma confirmação de

recebimento Exemplo

-- Envia uma chamada à função print do processo 2

dalua.send(“[email protected]”, “print”, “hello world!”)

Page 6: Programação de jogos MMO com  DALua

Módulo events Quando uma ação é finalizada, um evento

correspondente é disparado Publish/Subscribe: os processos podem registrar-se

para receber os eventos desejados e tratá-los se necessário dalua.events.monitor(nome_evento, tratador_do_evento) dalua.events.ignore(nome_evento, tratador_do_evento)

nome_evento é uma string tratador_do_evento é uma função

Tratador recebe argumentos sobre o evento É possível disparar seus próprios eventos

dalua.events.raise(nome_evento, lista_procs, arg1, arg2...)

Page 7: Programação de jogos MMO com  DALua

Módulo events Exemplorequire(“dalua”)local contador = 5

function envia() dalua.send(dalua.self(), “print”, “hello world!”) contador = contador – 1 if contador == 0 then dalua.events.ignore(“dalua_send”, envia) endend

dalua.events.monitor(“dalua_init”, envia)dalua.events.monitor(“dalua_send”, envia)dalua.init(“127.0.0.1”, 4321)dalua.loop()

Page 8: Programação de jogos MMO com  DALua

Módulo mutex Suporte a exclusão mútua distribuída

dalua.mutex.create(nome_mutex, procs) Cria um Mutex com nome nome_mutex dentre os processos

especificados na tabela procs dalua.mutex.enter(nome_mutex, mutex_cs, arg1,

arg2...) Efetua um pedido para entrar na região crítica Ao conseguir, chama a função mutex_cs e seus argumentos

dalua.mutex.leave(nome_mutex) Libera o acesso à região crítica a outros processos

dalua.mutex.add(nome_mutex, proc) dalua.mutex.remove(nome_mutex, proc)

Adiciona ou remove processos no Mutex existente

Page 9: Programação de jogos MMO com  DALua

Módulo app Aplicação: um grupo de processos Processos podem criar, entrar e sair de

aplicações dalua.app.init() dalua.app.create(nome_app) dalua.app.join(nome_app) dalua.app.leave(nome_app) dalua.app.destroy(nome_app)

Cada processo da aplicação conhece a lista de processos participantes dalua.app.processes(nome_app) dalua.app.applications()

Page 10: Programação de jogos MMO com  DALua

Módulo app Exemplo: criando uma aplicaçãofunction inicio() dalua.app.init()end

function appinit() dalua.app.create(“Grupo”)end

function joined(event, status, app, proc) print(“Processo ”..proc..“ entrou em ”..app) dalua.send(dalua.app.processes(“Grupo”), “print”, “Olá membros do Grupo!”)end

dalua.events.monitor(“dalua_init”, inicio)dalua.events.monitor(“dalua_app_init”, appinit)dalua.events.monitor(“dalua_app_join”, joined)

Page 11: Programação de jogos MMO com  DALua

Módulo timer Permite executar tarefas periodicamente

dalua.timer.add(proc, periodo, nvezes, func, arg1, arg2...) Cria um timer que executa a função func e seus

argumentos no processo proc por nvezes a cada periodo segundos.

func e os argumentos têm o mesmo formato do dalua.send

Se nvezes for igual a zero, executa indefinidamente Retorna um identificador de timer

dalua.timer.remove(timerid) Para e remove o timer especificado (se ainda existir)

Exemplodalua.timer.add(dalua.self(), 1, 10, “print”, “1 segundo se passou...”)

Page 12: Programação de jogos MMO com  DALua

Projeto de jogo MMORPG Desenvolvemos um protótipo de Massively

Multiplayer Online Role-Playing Game usando DALua

Arquitetura cliente-servidor escalável para aceitar um grande número de clientes conectados simultaneamente

Sistema composto por: Clientes de jogo Servidores de login Banco de dados Servidores de jogo

Page 13: Programação de jogos MMO com  DALua

Servidores de Jogo Sistema dividido em dois clusters de servidores:

Front-end: mantém as conexões dos clientes, distribuídas uniformemente entre os nós do cluster

Back-end: gerencia o estado do jogo, que é balanceado entre os nós do cluster de acordo com a carga de cada parte do mapa

Os clusters fazem parte de uma aplicação DALua e comunicam-se pela rede local

A conexão dos clientes é feita por canais TCP O cluster pode ser alterado em tempo de

execução

Page 14: Programação de jogos MMO com  DALua

Arquitetura dos Servidores de Jogo

Page 15: Programação de jogos MMO com  DALua

Ferramenta de Testes Para testar o desempenho e a escalabilidade do

sistema, desenvolvemos o Massive Online Test (MOT)

Feito com DALua e IUPLua para a interface de controle

Controla máquinas de teste para disparar grandes quantidades de clientes

Cria processos “espiões” para coletar informações Uso de memória RAM (disponível/total) Uso de CPU (%) Latência de conexão e de resposta (ms) Tráfego de rede (bytes recebidos/enviados por segundo)

Page 16: Programação de jogos MMO com  DALua

MOT em Funcionamento

Page 17: Programação de jogos MMO com  DALua

Resultados dos Testes Configuração dos clusters:

3 servidores de jogo front-end 4 servidores de jogo back-end 3000 clientes

Obtivemos bom desempenho e baixa latência (< 10 ms)

O uso de CPU mostrou-se adequado, nunca saturando a capacidade total das máquinas do cluster

A ferramenta de testes MOT torna possível o diagnóstico de problemas de desempenho encontrados em sistemas distribuídos

Page 18: Programação de jogos MMO com  DALua

Conclusão Foi possível desenvolver um complexo

sistema de clusters de forma simplificada com o DALua

A linguagem Lua não deixou a desejar em desempenho

Nosso protótipo de MMORPG foi uma ótima maneira de testar e aprimorar a biblioteca DALua

A ferramenta de testes MOT mostrou-se extremamente útil para analisar o desempenho desse tipo de aplicação

Page 19: Programação de jogos MMO com  DALua

Referências ALua

http://alua.inf.puc-rio.br DALua

http://alua.inf.puc-rio.br/dalua “Arquitetura para Servidores de Jogos Online

Massivamente Multiplayer” Link no site do DALua

Contato: [email protected]