programação de jogos mmo com dalua ricardo costa

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

Upload: internet

Post on 16-Apr-2015

107 views

Category:

Documents


2 download

TRANSCRIPT

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

Programação de jogos MMO com DALua

Ricardo Costa

Page 2: 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

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

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 Ricardo Costa

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 Ricardo Costa

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 Ricardo Costa

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 Ricardo Costa

Módulo events Exemplo

require(“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 Ricardo Costa

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 Ricardo Costa

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 Ricardo Costa

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 Ricardo Costa

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 Ricardo Costa

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 Ricardo Costa

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 Ricardo Costa

Arquitetura dos Servidores de Jogo

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

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 Ricardo Costa

MOT em Funcionamento

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

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 Ricardo Costa

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 Ricardo Costa

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]