A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores.

Apresentações semelhantes


Apresentação em tema: "Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores."— Transcrição da apresentação:

1 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 1 CMP167 – Programação com Objetos Distribuídos B P2PSE Implementação do suporte a múltiplos servidores na biblioteca P2PSE Carlos Eduardo Benevides Bezerra Orientador: Cláudio Fernando Resin Geyer Universidade Federal do Rio Grande do Sul Instituto de Informática Grupo de Processamento Paralelo e Distribuído

2 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 2 Sumário Jogos massivamente multijogador (MMOG) Soluções tradicionais para suporte a MMOG (servidor super-dimensionado) –Vantagens e desvantagens Soluções descentralizadas –P2P P2PSEA P2PSE O suporte a multi-servidor Arquitetura implementada O código (API) + começar pelo código que dá as funcionalidades básicas da api + explicar o que foi adicionado

3 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 3 Jogos massivamente multijogador Massively multiplayer online games (MMOG) –Rede de comunicação utilizada em geral é a Internet –Suporte a grande número de jogadores simultaneamente –Mesmo espaço virtual –Suporte a estado persistente World of WarcraftExemplo: World of Warcraft –Mundo virtual de “fantasia medieval”, no estilo RPG (maioria dos produtos comerciais atualmente) –Mais de 5 milhões de assinantes –Dezenas, até centenas de milhares de jogadores online simultaneamente

4 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 4 Soluções tradicionais para suporte a MMOG Utilização de um grande servidor super-dimensionado –Costuma ser caro Hardware para tal servidor é de alto custo Link de comunicação com dezenas de GBps Arquitetura cliente/servidor –Clientes enviam comandos, que são processados pelo servidor –Servidores enviam atualizações de estado para os clientes –Simulação executada no servidor, que impede trapaça Exemplo: World of Warcraft –Clusters de servidores de World of Warcraft Cada cluster é um realm independente Cluster distribuídos geograficamente Cada cluster suporta dezenas de milhares jogadores simultâneos

5 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 5 Vantagens e desvantagens da arquitetura cliente/servidor Vantagens –Fabricante mantém controle de acesso ao jogo –Tem grande resistência a trapaça –Não há grandes exigências do cliente Baixo processamento de simulação Comunicação restrita com o servidor –Simplicidade de implementação Desvantagens –Todo o custo de processamento e comunicação recai sobre o servidor –Risco de haver recursos insuficiente ou excessivos para o servidor –Inviável para empresas de menor porte

6 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 6 Soluções descentralizadas Motivação –Desonerar o servidor –Distribuir carga de processamento e comunicação com os clientes –Ideal: tornar o jogo independente de servidores Problemas –Servidor não mais verificando a simulação do jogo –Risco de trapaça por parte dos clientes –Manutenção de um estado consistente de forma distribuída

7 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 7 Arquitetura alternativa a cliente/servidor: peer-to-peer (P2P) Arquitetura cliente/servidor Simulação no servidor Arquitetura P2P Simulação nos clientes

8 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 8 O projeto P2PSE Exploração do modelo de instâncias –Guild Wars –Divisão do mundo virtual em dois ambientes: Social De ação Solução híbrida –Ambiente social: cliente/servidor –Ambiente de ação: P2P Combina algumas vantagens dos dois modelos –Cliente/servidor: Controle de acesso ao jogo Entidade central para gerenciar detecção de trapaça –P2P: Redução do custo de processamento do servidor Redução do custo de comunicação do servidor

9 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 9 Modelo do P2PSE

10 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 10 Arquitetura do P2PSE

11 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 11 Implementação do multi-servidor Tornar o jogo mais escalável Divisão do mundo em vários espaços sociais independentes World of Warcraft –Semelhante aos realms de World of Warcraft Nova entidade: meta-servidor –Servidores são clientes do meta-servidor –Gerencia persistência De estado dos jogadores De contas de usuário, autenticando Da lista de servidores permitidos, autenticando –Gerencia a adição de servidores ao jogo –Mantém uma lista dos servidores ativos –Redireciona clientes a servidores ativos

12 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 12 Arquitetura do multi-servidor

13 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 13 Características do modelo (1/2) Arquitetura de três níveis: –Cliente, servidor, multi-servidor Cliente só precisa saber o endereço do meta-servidor –Meta-servidor retorna lista de servidores ativos Cliente deve efetuar login após conectar-se a um servidor Servidor encaminha pedidos de login para o meta- servidor, que confere os dados e retorna uma resposta Cada cliente só pode se conectar a um servidor por vez (conta de usuário é travada no meta-servidor)

14 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 14 Características do modelo (2/2) Cada servidor tem um espaço social independente –Espaços sociais disjuntos Clientes conectados em servidores diferentes não podem jogar um contra o outro Meta-servidor armazena o estado persistente de todos os jogadores Cada servidor, ao ser criado, precisa se conectar ao meta-servidor e se autenticar –Meta-servidor pode rejeitar servidores que tentem conectar-se a ele

15 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 15 Implementação (1/?) Utilizada linguagem orientada a objetos C++ –Criados mais de 30 métodos para a API e uma nova classe (metaserver), além da extensão de diversos métodos pré-existentes: total de mais de 1700 LOC, fora a aplicação de teste Utilização das libs HawkNL e zig, que são utilizadas por padrão pela P2PSE Cliente, servidor e meta-servidor modelados como objetos: –P2pseClient –P2pseServer –P2pseMetaServer

16 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 16 Implementação – P2pseClient (2/?) Métodos da classe P2pseClient: –bool connectToMetaServer (string metaServerAddressString, bool retrial = false); –bool askMetaServerForServers(); –bool DisconnectFromMetaServer(); –void loginOnServer (string userName, string password); –void SendStateToServer (buffer_c* stateData); –void LogoutFromServer (); Funções de callback de P2pseClient: –virtual void connectedToMetaServerOK (void); –virtual void connectedToMetaServerFAIL (void); –virtual void DisconnectedFromMetaServerOK (void); –virtual void receivedListOfServers (std::list server_list); –virtual void LoggedInOK (void); –virtual void LoggedInFAIL (unsigned short msgType); –virtual void SendStateOK (void); –virtual void SendStateFAIL (void); –virtual void LoggedOutOK (void);

17 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 17 Implementação – P2pseServer (3/?) Métodos da classe P2pseServer: –bool connectToMetaServer (string metaServerAddressString, bool retrial = false); –bool DisconnectFromMetaServer (); –bool SendAuthInfo (string myAddressString, unsigned long key); –void ForwardUserAuthReq (int p2pseClientId, buffer_c* userAuthReq); –void ForwardUserLogoutReq (int p2pseClientId); –void ForwardUserAuthOK (string userName, int p2pseClientNum); –void ForwardUserAuthFAIL (int p2pseClientNum, unsigned short msgType); –void ForwardUserData (int p2pseClientId, buffer_c* userData); –void ForwardUserDataOK (int p2pseClientId, string userName); –void ForwardUserDataFAIL (int p2pseClientId); –void ForwardUserLogoutOK (int p2pseClientId, string userName); –void SendLogoutToAllUsers (void);

18 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 18 Implementação – P2pseServer (4/?) Funções de callback de P2pseServer: –virtual void connectedToMetaServerOK (void); –virtual void connectedToMetaServerFAIL (void); –virtual void DisconnectedFromMetaServerOK (void); –virtual void AuthorizedByMetaServerOK (void); –virtual void AuthorizedByMetaServerFAIL (void); –virtual void ReceivedUserLoginReq (int p2pseClientId, buffer_c* loginMsg); –virtual void ReceivedUserLogoutReq (int p2pseClientId); –virtual void ReceivedUserData (int p2pseClientId, buffer_c* dataMsg); –virtual void UserDataConfirmedByMeta (string userName, int p2pseClientId); –virtual void UserAuthorizedByMetaServerOK (string userName, int p2pseClientNum); –virtual void UserAuthorizedByMetaServerFAIL (string userName, int p2pseClientNum, unsigned short msgType); –virtual void UserLoggedOutOK (int p2pseClientId, string userName);

19 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 19 Implementação – P2pseMetaServer (5/?) Métodos da classe P2pseMetaServer: –void AddServer (string& serverAddressString, unsigned long key); –void AddServer (const char* serverAddressString, unsigned long key); –void AddUser (string& userName, string userPassword); –void AddUser (const char* userName, string userPassword); –void ProcessNonBlocking (void); –void AllowServer( int source, string serverAddress); –void DenyServer (int source); –void AllowClient (string userName, int p2pseserver, int p2pseclient); –void DenyClient (string userName, int p2pseserver, int p2pseclient, unsigned short msg_type); –void AckUserData (int p2pseserver, int p2pseClientId, string userName); –void AckDisconnection (int source); –void LogUserOut (int p2pseserver, int p2pseClientId, string userName);

20 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 20 Implementação – P2pseServer (6/?) Funções de callback de P2pseMetaServer: –virtual bool ReceivedServerAuthReq (int client, string server_addr, unsigned long key); –virtual bool ReceivedStdUserAuthReq (int client, int p2pse_client, string userName, string userPwd); –virtual void ReceivedUserStateData (int client, int p2pseClientId, string userName, buffer_c* userData); –virtual void ReceivedUserLogoutReq (int client, int p2pseClientId, string userName); –virtual void ServerDied (int server); –virtual void HandleMessage (buffer_c* message, int client);

21 Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSE 21 Referências CECIN, Fábio; GEYER, Cláudio. Projeto P2PSE - Middleware de suporte a jogos maciçamente multijogador (MMOGs). WSPPD, 2006. CECIN, Fábio; GEYER, Cláudio. P2PSE project: partially decentralized simulation for instanced MMOGs. WSPPD, 2006. HawkNL (Hawk Network Library) – disponível em: http://www.hawksoft.com/hawknl/ ZIG Game Engine – disponível em: http://zige.sourceforge.net/


Carregar ppt "Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE Trabalho Final: Implementação do suporte a múltiplos servidores."

Apresentações semelhantes


Anúncios Google