Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE...
-
Upload
nina-alencastre-mangueira -
Category
Documents
-
view
226 -
download
9
Transcript of Carlos Eduardo Benevides Bezerra CMP167 CMP167 – Programação com objetos distribuídos B P2PSE...
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/1.jpg)
1Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
CMP167 – Programação com Objetos Distribuídos BCMP167 – Programação com Objetos Distribuídos B
Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Carlos Eduardo Benevides BezerraOrientador: Cláudio Fernando Resin GeyerUniversidade Federal do Rio Grande do SulInstituto de InformáticaGrupo de Processamento Paralelo e Distribuído
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/2.jpg)
2Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
SumárioSumário
• Jogos massivamente multijogador (MMOG)
• Soluções tradicionais para suporte a MMOG (servidor super-dimensionado)– Vantagens e desvantagens
• Soluções descentralizadas– P2P
• A P2PSEP2PSE
• 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
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/3.jpg)
3Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Jogos massivamente multijogadorJogos 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
• Exemplo: World of WarcraftWorld 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
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/4.jpg)
4Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Soluções tradicionais para suporte a MMOGSoluçõ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:– Clusters de servidores de World of WarcraftWorld of Warcraft
• Cada cluster é um realm independente• Cluster distribuídos geograficamente• Cada cluster suporta dezenas de milhares jogadores simultâneos
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/5.jpg)
5Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Vantagens e desvantagens da arquitetura cliente/servidorVantagens 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
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/6.jpg)
6Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Soluções descentralizadasSoluçõ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
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/7.jpg)
7Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Arquitetura alternativa a cliente/servidor: peer-to-peer (P2P)Arquitetura alternativa a cliente/servidor: peer-to-peer (P2P)
• Arquitetura cliente/servidor• Simulação no servidor
• Arquitetura P2P• Simulação nos clientes
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/8.jpg)
8Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
O projeto P2PSEO 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
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/9.jpg)
9Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Modelo do P2PSEModelo do P2PSE
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/10.jpg)
10Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Arquitetura do P2PSEArquitetura do P2PSE
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/11.jpg)
11Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Implementação do multi-servidorImplementação do multi-servidor
• Tornar o jogo mais escalável
• Divisão do mundo em vários espaços sociais independentes– Semelhante aos realms de World of WarcraftWorld 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
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/12.jpg)
12Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Arquitetura do multi-servidorArquitetura do multi-servidor
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/13.jpg)
13Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Características do modelo (1/2)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)
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/14.jpg)
14Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Características do modelo (2/2)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
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/15.jpg)
15Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Implementação (1/?)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
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/16.jpg)
16Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Implementação – P2pseClient (2/?)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<string*> server_list);– virtual void LoggedInOK (void);– virtual void LoggedInFAIL (unsigned short msgType);– virtual void SendStateOK (void);– virtual void SendStateFAIL (void);– virtual void LoggedOutOK (void);
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/17.jpg)
17Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Implementação – P2pseServer (3/?)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);
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/18.jpg)
18Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Implementação – P2pseServer (4/?)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);
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/19.jpg)
19Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Implementação – P2pseMetaServer (5/?)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);
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/20.jpg)
20Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
Implementação – P2pseServer (6/?)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);
![Page 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.](https://reader033.fdocument.pub/reader033/viewer/2022051403/5706384c1a28abb8238f62dd/html5/thumbnails/21.jpg)
21Carlos Eduardo Benevides Bezerra CMP167CMP167 – Programação com objetos distribuídos B
Trabalho Final: Implementação do suporte a múltiplos servidores na biblioteca P2PSEP2PSE
ReferênciasReferê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/