PEDRO MONTEIRO KAYATT SISTEMAS DE REDE OBJETIVANDO PLATAFORMAS DE JOGOS DIGITAIS - PDF
PEDRO MONTEIRO KAYATT SISTEMAS DE REDE OBJETIVANDO PLATAFORMAS DE JOGOS DIGITAIS
Download "PEDRO MONTEIRO KAYATT SISTEMAS DE REDE OBJETIVANDO PLATAFORMAS DE JOGOS DIGITAIS"
João Henrique Sacramento Lage
1 PEDRO MONTEIRO KAYATT SISTEMAS DE REDE OBJETIVANDO PLATAFORMAS DE JOGOS DIGITAIS
2 PEDRO MONTEIRO KAYATT II SISTEMAS DE REDE OBJETIVANDO PLATAFORMAS DE JOGOS DIGITAIS Texto apresentado à Escola Politécnica da Universidade de como requisito para a conclusão do curso de graduação em Engenharia de Computação, junto ao Departamento de Engenharia de Computação e Sistemas Digitais (PCS).
3 PEDRO MONTEIRO KAYATT III SISTEMAS DE REDE OBJETIVANDO PLATAFORMAS DE JOGOS DIGITAIS Texto apresentado à Escola Politécnica da Universidade de como requisito para a conclusão do curso de graduação em Engenharia de Computação, junto ao Departamento de Engenharia de Computação e Sistemas Digitais (PCS). Área de Concentração: Engenharia de Sistemas Digitais e Computação Orientador: Prof. Dr. Ricardo Nakamura
4 IV FICHA CATALOGRÁFICA Kayatt, Pedro Monteiro Sistemas de rede objetivando plataformas de jogos / P.M. Kayatt. --,. 65 p. Trabalho de Formatura - Escola Politécnica da Universidade de. Departamento de Engenharia de Computação e Sistemas Digitais. 1. Sistemas de rede 2. Jogos I. Universidade de. Escola Politécnica. Departamento de Engenharia de Computação e Sistemas Digitais II. t.
5 AGRADECIMENTOS V Este trabalho é dedicado a minha família, a qual tem me apoiado desde o começo. Através de longos períodos de tempo longe de casa, em meu diploma duplo, ou mesmo em rotinas incomuns vivendo em madrugadas, e se comunicando através de s mesmo sob o mesmo teto. Risadas que sempre me fizeram mais forte. Preciso também agradecer meus amigos os quais jamais me esqueceram. Àqueles antigos que inúmeras vezes me visitaram, na esperança que eu estivesse livre, e aos novos amigos que conheci nesta longa jornada de seis anos que estiveram comigo lutando e vivendo pelos seus sonhos. Obrigado à minha mãe, Cristina, que sempre me mostrou o certo e o errado e como eu deveria seguir meu coração e não apenas a razão. Ao meu pai, Cesar Augusto, que é meu exemplo de conhecimento e inspiração de ser e superar, com todos os conselhos certos me mostrando que amar é cuidar. Para meus irmãos; Renato que sempre foi um exemplo de guerreiro, desde o nascimento lutando contra uma deficiência e mostrando ao mundo que ele poderia ir além. Obrigado por me mostrar que nada é impossível. E ao Ricardo, um grande cara com um grande coração, sempre se esforçando ao máximo, servindo no exército e estudando na faculdade, você é doido meu irmão! Para minha namorada, Keila Keiko que me apoiou e ajudou de inúmeras formas, me dando outros pontos de vista, um novo jeito de pensar e criando em mim uma esperança de incríveis mudanças. Obrigado pelos sonhos. Aos meus avós, que sempre foram além, superando seus limites e sempre bem humorados, interessados em como minha vida se desenvolvia. Hoje, definitivamente eu sei de quem meus pais puxaram quem eles são. A todos que conheci na Itália, na PoliMi e na Novecento, aprendendo e estudando, dando o nosso melhor para obtenção dos sonhos. Nas viagens, brincadeiras, guerras e bonecos de neve, noites geladas e feriados longe das nossas famílias, grazie mille ragazzi!
6 VI Ainda que eu ande pelo vale da sombra da morte, não temerei mal nenhum, porque Tu estás comigo: a Tua vara e o Teu cajado me consolam. Psalm 23:4 In memoriam Carlos Francisco Kayatt.
7 RESUMO VII O campo dos videogames vem evoluindo e tornando-se a cada ano um caso de estudo mais sério. Muitas melhorias técnicas foram elaboradas e desenvolvidas para suportar tanto os negócios como a própria comunidade de gamers. Com uma receita que supera o Mercado Hollywoodiano e algoritmos computacionais ganhando espaço em diversas conferências, finalmente o assunto se apresenta com a seriedade que há. Adicionando ao advento da Internet, somada a crescente evolução de banda de transmissão e a vasta adoção em lares por todo o globo, os serviços on-line relacionados a jogos se tornou uma necessidade. Neste trabalho é apresentada uma análise dos serviços de jogos em rede, em como estes estão organizados e quais diferenças podem ser encontradas entre eles focando em como é proposta uma superação das barreiras entre um jogador comum e o jogador on-line. Não obstante, são apresentadas partes de um projeto que foi desenvolvido na empresa de jogos italiana Novecento Games, onde os pontos comuns de diferentes serviços de rede foram agrupados visando à construção de uma biblioteca comum. Concluindo o documento, é demonstrado um projeto em código-livre de uma aplicação que exemplifica as teorias então estudadas e implementa de forma simples um protótipo de protocolo de comunicação de jogos. Palavras-chave: Engenharia. Rede. Jogo. Sistemas de Jogos. Sony. Nintendo. Microsoft. Xbox. Biblioteca comum. On-line. Vídeo Games.
8 ABSTRACT VIII The videogames field has been evolving and becoming each year a more serious case of study. Many technological improvements have been done in order to support the gamer community and business. With revenue overcome the Hollywood market and the computer algorithms getting space on many conferences, finally the subject has presented it as serious it is. Adding that to the advent of the Internet, the increased evolution of bandwidth and the great adoption of it on most of the homes across the globe, the online service related to gamming has become a must. In this thesis has an analysis of the actual networking gaming services, as how they are organized and which differences can be found in each one of them focusing on how they propose to suppress the barriers that separate the common player to the on-line player. Nevertheless is presented parts of a project that was developed at Novecento Games, an Italian videogame company, where the common points of these networking services where assemble in the way to build a common library. A conclusion of this document is, then, presented a project in open-source code of an application. This example shows the theories that had been studied and implements in a simple game communication protocol. Keywords: Network. Gaming. System. Sony. Nintendo. Microsoft. Xbox. Library. Online. Videogame
9 LISTA DE FIGURAS IX FIGURA 1 RECEITA DA INDÚSTRIA DE VÍDEO GAME (US)... 1 FIGURA 2 USUÁRIO DE INTERNET POR 100 HABITANTES (FONTE: ITU)... 2 FIGURA 3 - EXEMPLO DE CURVAS DE APRENDIZADO EM JOGO... 3 FIGURA 4 - XBOX LIVE LOGO... 5 FIGURA 5 - MICROSOFT XBOX CONSOLE... 6 FIGURA 6 - MICROSOFT XBOX 360 CONSOLE... 6 FIGURA 7 - FACEBOOK APPLICATION RUNNING ON XBOX LIVE... 9 FIGURA 8 UM EXEMPLO DO GRÁFICO DE FATORE DA TRUESKILL FIGURA 9 LATÊNCIA ROUND TRIP DO CONSOLE A XBOX LIVE FIGURA 10 - PLAYSTATION NETWORK LOGO FIGURA 11 - PLAYSTATION 3 CONSOLE FIGURA 12 - PLAYSTATION PORTABLE (PSP) HANDHELD FIGURA 13 - TROPHIES OF THE PSN FIGURA 14 - PLAYSTATION HOME CENTRAL'S PLAZA FIGURA 15 - NINTENDO WI-FI CONNECTION FIGURA 16 - NINTENDO WII CONSOLE FIGURA 17 - NINTENDO DS HANDHELD FIGURA 18 RELACIONAMENTO DE SIMULAÇÕES, VES E JOGOS DIGITAIS COM O GENERO DO JOGO FIGURA 19 DESEMPENHO DO JOGADOR SOB DIFERENTES LATÊNCIAS INDUZIDAS E PARA DIFERENTES GÊNEROS DE JOGOS FIGURA 20 NÍVEIS DE DESENVOLVIMENTO: (A) SPLIT-SCREEN, (B) UMA ARQUITETURA PEER- TO-PEER, (C) UMA ARQUITETURA CLIENTE-SERVIDOR, E (D) UMA ARQUITETURA REDE DE SERVIDORES FIGURA 21 FRAÇÃO DE SERVIDORES ACEITÁVEIS VERSUS NÚMERO DE CLIENTES JOGANDO SIMULTANEAMENTE PARA DIFERENTES GÊNEROS DE JOGOS FIGURA 22 NA ARQUITETURA DE CENTRALIZADA O SERVIDOR DE DADOS (NÓ) REGISTRA TODA A INFORMAÇÃO. NA REPLICADA, CADA NÓ GERENCIA UMA REPLICA DE TODOS OS DADOS. NA DISTRIBUÍDA, A INFORMAÇÃO É DISTRIBUÍDA ENTRE OS NÓS
10 X FIGURA 23 ARQUITETURAS DEFINEM COMO AS MENSAGEM SÃO CHAVEADAS ENTRE NÓS LOCAIS E REMOTOS FIGURA 24 TÉCNICAS DE TRANSMISSÃO FIGURA 25 DISTRIBUIÇÃO DE UM AMBIENTE DE JOGO FIGURA 26 - FULL CONE NAT FIGURA 27 - RESTRICTED CONE NAT FIGURA 28 - PORT RESTRICTED CONE NAT FIGURA 29 - SYMMETRIC NAT FIGURA 30 SERVIDOR SOCKET COM UMA ABERTURA PASSIVE NA PORTA FIGURA 31 SOLICITAÇÃO DE CONEXÃO DE UM CLIENTE À UM SERVIDOR FIGURA 32 SERVIDOR REPASSA A GERENCIAR DA CONEXÃO PARA UM FILHO FIGURA 33 UMA SEGUNDA SOLICITAÇÃO DE CONEXÃO COM O SERVIDOR FIGURA 34 COMPONENTES DE UM SISTEMA DE REDES FIGURA 35 CONFIGURAÇÃO QUANDO USANDO FUNÇÕES DE PROCURA DE SALA FIGURA 36 - DESIGN DE UMA APLICAÇÃO QUE UTILIZA A FUNÇÃO DE BUSCA POR UMA SALA FIGURA 37 CONFIGURAÇÃO QUANDO UTILIZANDO LOBBIES FIGURA 38 DESIGN DE UMA APLICAÇÃO UTILIZANDO LOBBIES FIGURA 39 CONFIGURAÇÃO QUANDO UTILIZANDO TODOS OS NÍVEIS FIGURA 40 - DESIGN DE UMA APLICAÇÃO UTILIZANDO TODOS OS NÍVEIS FIGURA 41 - IDE FORNECIDA PELA API PROCESSING FIGURA 42 - PROTÓTIPO DE JOGO: O QUADRADO AMARELO É O PERSONAGEM CONTROLÁVEL, O BRANCO O REMOTO, E OS AZUIS AUTOMATICAMENTE CRIADOS FIGURA 41 O JOGO FLOWER DA THEGAMECOMPANY UTILIZE A PHYREENGINE FIGURA 42 UM EXEMPLO DE UMA MÁQUINA DE ESTADOS FINITA (FSM) FIGURA 45 - PROTÓTIPO SIMPLES DE CLIENTE E SERVIDOR SENDO EXECUTADOS SIMULTANEAMENTE... 52
11 LISTA DE TABELAS XI TABELA 1 COMPARAÇÃO ENTRE XBOX LIVE SILVER E XBOX LIVE GOLD... 7 TABELA 2 CONEXÕES DE LAN VERSUS INTERNET TABELA 3 NÚMERO DE PONTOS PARA OBTER UM LEVEL TABELA 4 NÚMERO DE PONTOS ADICIONADOS POR CADA TROPHY TABELA 5 - PSN VS. XBOX LIVE COMPARAÇÃO DE FUNCIONALIDADES (LEIMEISEL 2008)... 53
12 LISTA DE ABREVIATURAS E SIGLAS XII Acrônimo ACK AP CEO COD DLC DS E3 FPS FSM GFWL HD ID IP ISP ITU LAN MMORPG MW NAT NWC P2P PC Significado Acknowledge Access Point Chief Executive Officer Call of Duty Downloadable Content Nintendo DS Handheld Electronic Entertainment Expo First Person Shooter Finite State Machine Games for Windows Live High Definition Identification Internet Protocol Internet Service Provider International Telecommunication Union Local Area Network Massively Multiplayer Online RPG Modern Warfare Network Address Translation Nintendo Wi-Fi Connection Peer-to-Peer Personal Computer
13 PS3 PlayStation 3 XIII PSP RPG SCE SDK STUN TCP UDP UK US VE VPN WEP Wii WPA XBLM XMB PlayStation Portable Role Playing Game Sony Computer Entertainment Software Developer Kit Session Traversal Utilities for NAT Transmission Control Protocol User Datagram Protocol United Kingdom United States Virtual Environments Virtual Private Network Wired Equivalent Privacy Nintendo Wii Console Wireless Application Protocol Xbox Live Marketplace Xross Media Bar
14 SUMÁRIO XIV LISTA DE FIGURAS...IX LISTA DE TABELAS...XI LISTA DE ABREVIATURAS E SIGLAS...XII 1 INTRODUÇÃO MOTIVAÇÃO DEFINIÇÃO DO PROBLEMA ESTRATÉGIA DE SOLUÇÃO ESTRUTURA ESTADO DA ARTE XBOX LIVE Introdução Funcionalidades TrueSkill Ranking TrueSkill Matchmaking Xbox Live Market Place PLAYSTATION NETWORK (PSN) Introdução Funcionalidades Sistema de Matchmaking da PSN PlayStation Store... 21
15 XV 2.3 NINTENDO WI-FI CONNECTION Introdução Funcionalidades Matchmaking METODOLOGIA ESTRUTURAS DE REDE EXEMPLOS DE CONEXÃO DE SOCKET ORGANIZAÇÕES DE SEÇÕES DE REDE PROCESSING RESULTADOS A BIBLIOTECA DE REDE DEMO EM PROCESSING CONCLUSÃO REFERÊNCIAS APENDICE A - EXEMPLO DE CÓDIGO DE UM CLIENTE DE REDE EM PROCESSING APÊNDICE B - EXEMPLO DE CÓDIGO DE UM SERVIDOR DE REDE EM PROCESSING...62
16 1 INTRODUÇÃO Motivação Não faz muito tempo a internet não era nem sequer imaginada, uma rede virtual que pode conectar a todos, fazendo possível a troca dos mais variados tipos de mídia. Além disto, logo após o boom da Internet [I], rapidamente novas tecnologias começaram a surgir a fim de suprir a necessidade de estar sempre conectado. A rede mundial então tornou-se uma certeza, todo computador precisava estar conectado à Internet ou então ele seria inútil, afinal para quê servem os computadores se eles não estão conectados?. Logo após, outra Revolução nas Conexões teve espaço: o Wi-Fi. Onde além de estarem conectados, as pessoas agora podiam (e queriam) estar conectadas sem utilizar fios. Nada físico te segura, a Internet é agora em Qualquer lugar/ Qualquer Hora. Através destas evoluções a mídia vem mudando drasticamente a fim de seguir as violentas inovações. Enquanto isso a indústria dos jogos veio mudando da água ao vinho, um pequeno negócio nos anos 80 se transformou em uma indústria de aproximadamente 42 bilhões de dólares (fonte: IbisWorld) superando até mesmo o mercado Hollywoodiano e havendo instalações nas casa da maioria das famílias no mundo. Figura 1 Receita da Indústria de Vídeo Game (US)
17 2 Projetos que estavam acostumados a serem desenvolvidos em garagens agora têm uma média de desenvolvimento de três anos [I] e um orçamento de aproximadamente 5 a 20 mil dólares [II]. Assim esta mídia também vem sofrendo mudanças causadas pela Revolução da Rede, o jogo multi-jogador online começou a se espalhar nos anos de através do jogo chamado Quake produzido pela id Software (ver Deste ponto em diante, os jogos multi-jogador online começaram a ser uma febre, todos os jogos PRECISAVAM ter a opção Jogar Online. Gamers começaram a gastar mais e mais horas jogando por toda a noite. Tendo isso em mente as maiores companhias de jogos desenvolveram sistemas complexos que podem suportar milhares de jogadores assim como diferentes estilos de jogos. Figura 2 Usuário de Internet por 100 habitantes (Fonte: ITU)
18 3 1.2 Definição do Problema Tendo dito isto, é óbvio que o mercado online está em expansão, e na maioria das vezes, uma grande fatia é composta de usuários inexperientes que apenas começaram com o básico de comunicações em rede há alguns anos. O foco do nosso problema será prover um sistema simples que possui uma rápida curva de aprendizagem, sem contudo comprometer a robustez necessária para expandir as experiência online até seus limites. A ideia principal é satisfazer tanto o novo mercado como os gamers padrão. Figura 3 - Exemplo de Curvas de Aprendizado em Jogo Além disso, um grande problema envolve o desenvolvimento multi-plataforma de uma aplicação on-line, como um jogo. Como será descrito em seções futuras, cada sistema tem seu próprio método de gerenciar os pacotes de rede e as conexões, assim como protocolos (encriptação, handshanking, etc.).
19 4 Não obstante, apesar da contínua evolução da internet e do aumento da velocidade e da qualidade dos serviços, as aplicações online estão sempre sujeitas ao problema do atraso, que é ainda pior quando relacionado a jogos, levando o usuário a uma experiência frustrante, e no final das contas, a negação ao serviço. 1.3 Estratégia de Solução Como solução foi decidida que as ações de rede devem ser expressas da maneira mais simples possível, tornando uma tarefa fácil tanto ao cliente como ao desenvolvedor acessarem essas funções. O primeiro passo do projeto é reconhecer as ações mais básicas nos diferentes sistemas de rede em uso no mercado atual. O próximo passo será analisar os algoritmos e métodos que cada um provê, e decidir o sistema mais conveniente a um desenvolvimento de uma biblioteca para diferentes usos de rede. Utilizando das melhores práticas destes sistemas de rede uma interface terá de ser definida. É necessário lembrar que o sistema precisa ser testado em uma aplicação real, tendo isso em mente, um modelo de jogo será desenvolvido (ou adaptado) com a finalidade de invocar a interface. A funcionalidade deve ser testada não só em ambiente fechado, mas também na internet pública, como será detalhado em seções futuras. 1.4 Estrutura A estrutura deste documento é definida a seguir: Capítulo 1 é a Introdução; Capítulo 2 é o Estado da Arte, o qual provê informações relevantes e atualizadas das tecnologias disponíveis e sistemas de rede que estão sendo usados; Capítulo 3 é a Metodologia, onde passos de desenvolvimento serão tomados para exemplificar como nosso problema pode ser solucionado; Capítulo 4 expõe os resultados obtidos. Analisando os dados e as soluções adquiridas dos testes, assim como estes foram estabelecidos; Capítulo 5 é a conclusão. Ela nos apresenta a conclusão do projeto e como pode ser desenvolvido em projetos futuros.
20 2 ESTADO DA ARTE Xbox Live Figura 4 - Xbox Live Logo Introdução A Xbox Live, também chamada de Live, é o Serviço de Jogos Online mais antigo analisado neste projeto e é o único que incialmente cobrava seus usuários, agora ele possui duas versões: Gold (que é cobrada) e a Silver (grátis) e as suas diferenças serão analisadas mais tarde. Live foi projetada para o primeiro console da Microsoft, o Xbox, e era uma de suas killing features. O logo da Live (Figura 4) é estampado na capa dos jogos que a podem acessar. Tomando partido da crescente adoção da banda larga (em 2001), o console Xbox (Figura 5) foi construído com uma porta Ethernet (10/100) e com um disco rígido interno, já prevendo o lançamento do sistema Live. Como prometido pela Microsoft, o serviço foi demonstrado inicialmente na E3 de 2002 e então em 15 de Novembro estava finalmente disponível aos usuários. Deste aquele momento a Xbox Live vem recebendo muitas atualizações, e está em constante participação de Beta Testers, que são usuários que aceitam a tarefa de testar o sistema. Em troca do recebimento de informações para o melhoramento do sistema, a Microsoft os recompensa com presentes como camisetas, jogos, cartões de memória, etc. No momento do lançamento do seu último console, o Xbox 360 (figura 6), a Live já havia evoluído a outro nível. Ao início ela havia basicamente uma lista de amigos, em contrapartida no momento do lançamento do Xbox360 era possível assistir outros gamers, competindo um contra o outro, o que garantiu a patente de número 5000 à Microsoft.
21 6 O número de inscritos na Xbox Live também é um critério a ser considerado, em 6 de Janeiro de 2009, eles possuíam 17 milhões de membros e a Microsoft anunciou que em 5 de Fevereiro de eles já haviam 23 milhões de membros. Não deve ser ignorado o fato de que a Microsoft também fornece o sistema Games for Windows Live, também conhecido como GFWL, que usa um sistema parecido ao do Xbox, porém não cobrado, o qual não estará no escopo deste estudo. Figura 5 - Microsoft Xbox Console Figura 6 - Microsoft Xbox 360 Console Funcionalidades Gamercards: é basicamente um cartão de apresentação de um jogador, mostrando o apelido do jogador (gamertag), sua MOTTO (descrição de quem você é); a gamer foto (usualmente de algum de seus jogos), uma pequena bibliografia, etc. Virtual Avatar: um avatar criado pelo usuário que deve representá-lo dentro do mundo virtual. Game achievements: são algumas conquistas que o jogador precisa obter. Gamerscores: para cada achievement obtido o jogador irá receber um certo número de pontos (Gamerscore Points) que são somados neste item. Reputation: é a reputação do jogador, obtido pelo voto de outros jogadores. A reputação padrão é 100% (cinco estrelas) depois que um jogador votou em outro usuário.
22 7 Friends list: uma lista de usuários adicionados pelo gamer. Através dela você pode trocar mensagens, iniciar uma vídeo/áudio conversa, convidar para jogos, comparar achievements dos jogos, etc. Recent player list: é uma lista dos 50 últimos jogadores com quem o gamer jogou. Complaint filing system: Este item permite que um usuário denuncie outro usuário por ter quebrado o Termo de Uso da Xbox Live. Funções Live Silver Live Gold Preço Gratis Mensalidade Voice chat Sim Sim Party chat Não Sim Video chat Não Sim Avatars Sim Sim Downloadable content Sim Sim Multiplayer gaming Não Sim Parties Não Sim Netflix movie streaming Não Sim Sky Player Não Sim Xbox Live Arcade point results Sim Sim Facebook Não Sim Twitter Não Sim last.fm Não Sim Zune Não Sim 1 vs 100 Não Sim Tabela 1 Comparação entre Xbox Live Silver e Xbox Live Gold Windows Live Messenger integration: integração com o conhecido sistema de mensagens instantâneas da Microsoft. Access to the Xbox Live Marketplace: loja virtual que oferece jogos, músicas e conteúdo de filmes. Voice Chat and Video Chat: usuários que tem microfone e Lite Vision Camera podem fazer Video Chat. Multiplayer Gameplay: O principal foco deste trabalho, o multi-jogador é apenas providenciado pela Live Gold, como demonstrado na Tabela 1.
23 8 Enhanced matchmaking: outro de um dos principais focos do estudo, o matchmaking é responsável por encontrar os melhores jogadores disponíveis para jogarem juntos a mesma partida. Este item será posteriormente melhor detalhado (Ver Seção TrueSkill Matchmaking). Parental controls: opção muito atrativa que permite com que limitações para a exposição de conteúdos adultos seja controlada. Inside Xbox: é um boletim informativo sobre as novidades da Xbox Live como eventos, produtos, entrevistas e jogos, totalmente integrado com o Xbox 360 Dashboard. O conteúdo de Inside Xbox é criado pelo time global de marketing do Xbox. Last.fm: é um conhecido website que contém uma aplicação que permite usuários a ouvir suas músicas favoritas e pesquisar por artistas semelhantes a outros. Social networking sites: famosas redes sociais também estão disponíveis no Xbox Live, como o Facebook e o Twitter. Usuários com a idade entre 13 e 17 anos podem acessar os aplicativos somente com o consentimento dos pais. Zune: aplicação que permite usuários a assistir vídeos e shows de TV direto do Marketplace em resoluções de 1080p HD com 5.1 som surround. Movie Parties: é uma aplicação que permite vídeos e shows de TV ser assistidos simultaneamente por amigos através do Xbox Live. Sky Player: é disponível apenas no Reino Unido e na Irlanda, oferecendo TV Ao-Vivo e por demanda, incluindo Sky News, Sky Sports e o Disney Channel Netflix: aplicação que permite seus membros alugar ilimitadamente (através de streaming) shows de TV de seus Netflix Instant Queue. Esta opção é apenas disponível nos EUA.
24 9 Figura 7 - Facebook application running on XBox Live Game Room: é um espaço virtual, que oferece uma biblioteca de 30 jogos de consoles e fliperamas clássicos incluindo Centipede, Asteroids Deluxe, e Super Cobra, apresentados com seus designs originais. A compra de títulos de árcade permite que os jogos sejam jogados através do Xbox Live e do Games for Windows Live. Game Room é uma aplicação Xbox 360 e Windows com jogos vendidos separadamente.
25 TrueSkill Ranking Na realidade o TrueSkill Ranking foi uma criação do Microsoft Research Laboratory (em Cambridge) e consiste em um algoritmo de classificação de Bayesian utilizado para encontrar o melhor nível aproximado de um jogador. Esse sistema é muito parecido com o sistema de classificação Elo, cuja classificação de habilidade é utilizado para jogadores de Go e de Xadrez. A introdução do paper de lançamento do TrueSkill diz (em tradução livre): Sistemas de classificação em jogos competitivos e em esportes servem para três principais funções. Primeiro, eles permitem que jogadores sejam equiparados com outros jogadores de habilidades semelhantes levando a partidas interessantes e equilibradas. Segundo, as classificações podem ser exibidas a jogadores e ao interesse público para então simular o interesse e a competição. Terceiro, classificações podem ser utilizadas como critério de qualificação para torneios. É impossível medir o desempenho de um jogador, mas utilizando os dados da quantidade de jogos e taxa de vitória, algumas estimativas podem ser efetuadas. Sendo que a classificação de um jogador é atualizada cada vez que ele joga uma partida, assim, a classificação adquire maior confiabilidade sobre a real habilidade do jogador. Na classificação TrueSkill, a classificação do jogador é datada como uma distribuição Normal (Ɲ), que é caracterizada por uma média (µ-mu) e uma variância (σ - sigma, que é a atual confiabilidade no valor de). Tal Ɲ(x), então, pode ser observado como sendo a probabilidade de um jogador possuir sua classificação X correta. Equação 1- Performance de um jogador O gráfico a seguir demonstra o processo iterativo de como o TrueSkill funciona. Existem quatro tipos de variáveis: s i para a habilidade do jogador, p i para o desempenho de todos, t i para o desempenho de times e d j para a diferença de desempenho de times. A primeira linha de fatores codifica a prévia, o produto dos fatores restantes caracterizam a probabilidade do Team 1 > Team 2 = Team 3. A seta indica a mensagem ótima passando a relação. Primeiro, todas as setas claras de mensagem são atualizadas de cima abaixo. Em seguida a relação do desempenho dos nós da diferença dos times são iterados na ordem numérica.
26 11 Finalmente a classificação posterior é computada atualizando todas as mensagens das setas escuras de baixo a cima. Figura 8 Um exemplo do gráfico de fatore da TrueSkill Na Xbox Live os valores iniciais são µ = 25 e σ = 25/3, que corresponde à probabilidade de uma classificação positiva de 99%. Através da análise rápida dos dados os pesquisadores da Microsoft conseguiram chegar a três pontos importantes que estão apresentados a seguir: Gêneros de jogos diferem no número efetivo de níveis de habilidade. Jogos de sorte (como Gamão ou Uno) tem uma distribuição de habilidade estreita, por outro lado, jogos mais realistas (como simuladores de corrida ou shooters) tem uma larga distribuição de habilidades. Ao exibir o resultado da habilidade como resposta, para jogadores que normalmente checam seus estados, conseqüentemente eles vêem isso como recompensa ou punição. Para melhorar sua classificação jogadores começam, então, a selecionar seus oponentes mais cuidadosamente ou até a trapacear.
27 12 A distribuição total de habilidade é deslocada para menor que a distribuição inicial quando os jogadores perdem seus primeiros poucos jogos (o que é esperado) TrueSkill Matchmaking Toda a complexidade da TrueSkill é sem valor se não colocada em prática. O propósito dela em nosso escopo é tornar possível encontrar a melhor solução de criação de partida, para isso é necessário enfatizar quais são as principais características de um jogador online e como alcançar sua satisfação. Jogadores podem ser simploriamente divididos em duas categorias principais: Play for Fun: São jogadores que apenas querem conhecer novas pessoas ou então jogar partidas rápidas com seus amigos. Eles estão principalmente interessados em ter uma partida simples e agradável, não se preocupando com recompensas ou competição. Play for Keeps: Também conhecidos como jogadores hardcore, eles gostam de saber como jogaram, guardar as pontuações, obter todas as recompensas e bônus dos níveis. De fato eles querem competir para descobrir quem é o melhor. Para satisfazer ambos os tipos de jogadores a Xbox Live tem dois tipos de jogatina online (respectivamente): Player Match: É projetado para recreação, este modo não afeta a classificação do jogador, ao invés disto apenas guarda os últimos jogadores e os jogadores mais frequentes que têm sido confrontados e os coloca com prioridade. Ranked Match: Este é o modo que utiliza o TrueSkill Ranking, tentando obter a habilidade do jogador e o colocar em confronto contra outros jogadores com habilidade semelhante. Houve um tempo em que as experiências de jogo multiplayer eram estritamente projetadas para redes locais (LAN), entretanto agora o foco foi completamente alterado para experiências na Internet, o que gerou uma mudança de diferentes fatores que precisam ser revistos, um exemplo destes pode ser acompanhado na Tabela 2 e também na Figura 9.
28 LAN Internet Número de jogadores simultâneo ,000 1,000,000 Alcance de encontro informal Sim Não Trapacear Não Sim Anonimato Não Sim Adequada Seção do Browser Sim Não Latência Conhecida Desconhecido Tabela 2 conexões de LAN versus Internet Um destes fatores mais importantes é certamente o número de jogadores simultâneos, para evitar que isto se torne um grande problema algumas recomendações podem ser seguidas, tentando obter o melhor matchmaking possível: Usar mecanismos de filtros para partidas (mapa, tipo, classe, etc.); isso irá minimizar os resultados e acelerar a pesquisa pela melhor solução. Evitar Criar/Entrar seção na interface do jogador; o gamer apenas quer jogar, os pormenores dos detalhes da configuração podem ser gerenciados pelo sistema de rede. Nenhum jogador deve ter mais poder na seleção dos parâmetros de jogo ou permissão para excluir outros jogadores. Mostrar informação sobre o progresso do processo de matchmaking; exibindo quantos jogadores são necessários ou a diferença de níveis atuais ajudam o jogador a estimar quanto tempo ele terá de esperar. 13 Figura 9 Latência Round Trip do Console a Xbox LIVE
29 14 Para jogos ranqueados algumas outras características são enfatizadas, Focar em um gameplay balanceado; sempre se certifique que os parâmetros da partida são tais que ambos os times possuem iguais chances de ganhar. Não dê informações ao gamer sobre jogadores adversários ou parâmetros da partida antes da partida iniciar. Assim, o TrueSkill matchmaking não é comprometido, já que não existem penalidades quando jogadores abandonam a partida antes do começo do jogo. Desencorajar jogadores de deixar a partida depois que o jogo inicie, informando-os então que isto irá causar uma penalidade no seu nível de habilidade. Não obstante há sempre a relação entre o tempo de espera e a qualidade da partida; em outras palavras, a partida precisa ser bem definida ao mesmo tempo em que o jogador não deseja esperar muito pelo início do jogo. No TrueSkill matchmaking o tempo de espera pode ser calculado por: Onde: GameModes; é o total de modos que o jogo possui. Modos de jogo são os diferentes jeitos que o jogo pode ser jogado. MatchTime; é a media de duração de uma partida (em minutos). PlayersPerMatch; é a média de jogadores por partida. SkillBins; é o número da variação admissível na habilidade. PlayersOnLine; é o número de jogadores online naquele momento. TempoEspera; é o tempo de espera para uma partida (em minutos). Por este motivo, para jogos multiplayer na Internet os desenvolvedores de jogos precisam estreitar as possibilidades focando acelerar o processo de matchmaking. Algumas das idéias principais a serem consideradas como maneiras inteligentes de diminuir o tempo de espera podem ser as seguintes:
30 Mantenha o número de modos de jogo baixo: Um número alto de modos 15 de jogo faz com que a base de jogadores esteja dividida em grupos menores. Modos de jogo devem ser utilizados somente para definir estilos de jogo que necessitam de grupos de habilidades diferentes para ser bem sucedido. Na Xbox Live, modos de jogos são utilizados em conjunto com tipos de jogos para criar uma tabela de líderes para cada jogo ou par de tipos de jogo. A equação precedente calcula a média de tempo de espera. Para um skill bins bem populado, o tempo de espera pode ser menor mesmo se o número de skill bins é alto (isto é, o tamanho da diferença de níveis para o matchmaking é pequena). Se você escolher adicionar filtros por habilidade, você deve manter um limite de diferença (gap) de níveis adaptativo que aumenta através do tempo (de espera). Projete partidas relativamente curtas para minimizar o tempo de espera no lobby do matchmaking. Uma partida de duas horas pode soar divertida, mas não é apenas um compromisso de tempo extenso por parte do jogador, mas é também um aumento significativo de tempo de espera para outros jogadores buscando partidas Xbox Live Market Place A Xbox Live Marketplace é um Mercado virtual projetado para o console Xbox 360 da Microsoft que permite que membros da Xbox Live efetuem o download de DLC (Downloadable Content) e conteúdo promocional. O serviço provê filmes e trailers de títulos, uma loja de vídeos, demonstração de jogos, jogos do Xbox Live Arcade, jogos do Xbox Live Indie (antigamente conhecido como Community Games), Games on Demand (títulos originais do Xbox 260 e Xbox), temas do Xbox360 Dashboard, etc. Em os serviços do Market Place foram estendidos a fim de suportar o WP7 (Windows Phone 7) caracterizando então o serviço a níveis mais elevados e colocando-o em ponta de competição com a Apple Store (dominante no mercado de fornecimento de produtos On-Demand, principalmente para o iphone).
31 2.2 PlayStation Network (PSN) 16 Figura 10 - PlayStation Network Logo Introdução Em 15 de Maio de 2006, foi a vez da Sony. A maior companhia japonesa, que detinha a maior quantidade de consoles vendidos da última geração (PlayStation 2), começou a seguir os passos da Microsoft e anunciou seu próprio sistema unificado de jogos online. Inicialmente chamado de PlayStation Network Plataform, ela foi aclamada diferentemente da Xbox Live principalmente por não cobrar pelo serviço e focar em dois consoles: PlayStation 3 (PS3) e PlayStation Portable (PSP). No inicio do serviço usuários podiam apenas se registrar através da interface de sistema de um PS3 ou de um PSP, atualmente as inscrições no sistema também podem ser feitas através do acesso ao web site da PlayStation Network [III]. Em 21 de setembro de 2006, Sony revelou na Tokyo Game Show que seria possível fazer aquisições de títulos através de download utilizando o sistema, eles iriam fornecer inicialmente jogos com pequenas quantidades de dados (pouco tamanho em dados). O registro de uma conta na PlayStation network não é associada a número de série de um console; entretanto nesta situação o jogador não pode comprar títulos, tornando desta forma o registro de um console necessário para compra de jogos. Múltiplos consoles pode utilizar a mesma conta, até um número de cinco, mas o usuário não pode ser excluído, do contrário seus dados serão bloqueados.
32 17 Figura 12 - PlayStation Portable (PSP) Handheld Figura 11 - PlayStation 3 Console Funcionalidades Assim como a Xbox Live, a PSN tem um grande número de funcionalidades. Algumas destas estão citadas a seguir: Profiles: este conceito não é muito diferente daquele do Gamercard (ver Xbox Live Funcionalidades na seção 2.1.2). Ele possui o apelido do jogador, seu jogo favorito, uma citação, e seus Trophies (similar aos Xbox Live Achievements). Sign-in ID/ Online-ID: basicamente é o utilizado no processo de registro. É através deste ID que o usuário efetua o login e também recebe informações e novidades da Sony. Friend List: assim como no serviço do Xbox, ele fornece uma lista de até cem jogadores, os quais devem ser adicionados através da interface do sistema dos amigos. Instant Messaging: é integrado no XMB (Xross Media Bar) como uma simples opção de envio de mensagens para jogadores amigos. Lobbies/Matchmaking: Fornece uma solução interna para criação de Mundos, Lobbies e Salas visando fornecer um sistema de matchmaking (ver ).
33 18 Multiplayer gameplay: O jogo online da PSN suporta até sete jogadores locais e até 64 jogadores na mesma seção. Assim como o matchmaking este item será detalhado em futuras explicações. Scores/Ranking: Diferentemente do sistema TrueSkill Ranking do Xbox (seção 2.1.3) o rankeamento na PSN é calculada através da soma dos Trophies de um jogador e do nível obtido através de pontos gerados com os Trophies, as tabelas abaixo detalham a obtenção destes pontos. Level Pontos Necessários Level 1 0 Level Level Level 4 1,200 Level 5 2,400 Level 6 4,000 Level 7 6,000 Level 8 8,000 Level 9 10,000 Level 10 12,000 Level 11 14,000 Level 12 16,000 Level 13 24,000 Level 14 32,000 Level 15 40,000 Level 16 48,000 Level 17 56,000 Level 18 64,000 Tabela 3 Número de pontos para obter um Level Trophy Valor do Ponto Bronze 15 Silver 30 Gold 90 Platinum 180 Tabela 4 Número de Pontos adicionados por cada Trophy Trophies: como já foi citado são recompensas dadas a jogadores quando estes completam determinados objetivos dentro dos jogos. Os Trophies podem ser: Platinum, Gold, Silver ou Bronze como descritos na imagem abaixo (Figura 13). Avatars: Uma imagem virtual que o jogador tem como sua representação no mundo virtual do console. Estes avatares podem ser utilizados na rede social chamada PlayStation Home. Voice/Video Chat: Usuários que possuem câmeras e microfone podem se comunicar entre si através de um chat em tempo real. Esta opção, porém, não é disponível quando em jogo. Cross Game Chat Room: Mensagens de texto que podem ser trocadas ao mesmo tempo em que se está jogando.
34 19 Figura 13 - Trophies disponíveis na PSN Ad-hoc Party: Uma opção exclusiva para o PSP, que torna possível conectar um usuário a outro sem a necessidade do uso de um Access Point (AP). Internet Browser: Utilizando o Google Search Engine, um modo simples de acessar páginas da Internet é o escopo desta funcionalidade. PlayStation Home: É um jogo social e focado em comunidades em rede, similar ao famoso Second Life [IV], ele cria a experiência de um mundo virtual onde jogadores possuem casas, roupas, itens, etc. Figura 14 - PlayStation Home Central's Plaza Parental Control: limita o acesso a BD, DVD e do Navegador de Internet para controle de visualização de crianças. System Update: Tanto PS3 quanto PSP podem atualizar seus firmwares diretamente através da PSN. What s New: É como um blog RSS que mantém o usuário atualizado com as últimas noticias sobre consoles e jogos.
35 20 Entertainment Third-Party Applications: PlayStation Network tem muitos contraltos com diferentes provedores de serviços e estes mudam de região em região. Os serviços online até agora são: FirstPlay, Qore, VidZone, ABC iview, BBC iplayer, MLB.tv, Netflix, now TV, RTE Player, TVNZ ondemand. PlayStation Store: Similar ao Xbox Live Market Place (ver seção 2.1.5) é um provedor de download de conteúdo. O usuário pode fazer o download de arquivos, desde vídeos a jogos inteiros, incluindo jogos demonstração e trailers.
36 Sistema de Matchmaking da PSN Assim como o Xbox tem seu TrueSkill Matchmaking, a PlayStation Network também possui um sistema de matching. Mas diferentemente do Xbox Live, o sistema de partidas da PSN é focado na organização de seções de jogadores, preocupado mais em grupos de jogadores do que no confronto jogador-jogador. Isso significa partidas em grupos, sempre maiores do que de dois jogadores. Um detalhe que é preciso ficar esclarecido neste momento é que nós não teremos um sistema de classificação preciso como o TrueSkill, mas ao invés os jogadores irão selecionar aqueles contra quem irão jogar. O método é baseado em uma forma bem estabelecida: um jogador cria o jogo e outro jogador acessa este jogo criado. Infelizmente não existem mais informações que possam ser compartilhadas, já que estas seriam parte de documentos confidenciais da SCE, impedindo a explicação de detalhes sobre este assunto neste ponto. Mais detalhes podem ser requisitados diretamente aos desenvolvedores oficiais ou a própria Sony PlayStation Store A Wikipédia define: O PlayStation Store é um mercado virtual online disponível para usuários dos consoles PlayStation 3 e PlayStation Portable, da Sony, via PlayStation Network. O mercado oferece uma gama de conteúdo disponível para compra e de graça. Conteúdo disponível inclui jogos completos, conteúdo adicional a jogos, demos jogáveis, temas e trailers de filmes e jogos. O serviço é acessível através de um ícone no XMB no PS3 e PSP. O mercado do PS3 pode ser acessado no PSP via uma conexão Remote Play com um PS3. Uma versão para Internet para o PSP também se faz disponível via Sony Media Go através de um PC. No dia 16 de maio de 2008, existiam 170 milhões de downloads disponíveis mundialmente na PlayStation Store."
37 2.3 Nintendo Wi-Fi Connection 22 Figura 15 - Nintendo Wi-Fi Connection Introdução Mesmo com a estratégia revolucionária que a Nintendo adotou com o Wii, último console lançado, eles também foram muito cuidadosos com os sistemas de conexão para melhorar a experiência de jogo. Antes de começar a falar sobre os serviços online é preciso ser dito que o Wii é um console, assim como o DS, que foi fabricado sobre aspectos inovativos e focado em um market share de não-jogadores, ao invés dos jogadores comuns. O serviço foi lançado em 14 de Novembro de 2005 nos Estados Unidos e em 21 de Novembro na Europa, sendo lançado junto com os jogos Mario Kart DS e Tony Hawk s American Sk8land, dois títulos do Nintendo DS. A NWC (Nintendo Wi- Fi Connection) se tornou bem popular e em 30 de Maio de 2007 já possuía aproximadamente cinco milhões de membros e por volta de 200 milhões de acessos. O serviço que estreou o uso da NWC no Wii foi Pokémon Battle Revolution, e utilizava exatamente a mesma tecnologia utilizada no DS, e os jogos que faziam utilização do serviço tinham o logo da Figura 15 em suas capas. Ao invés de uma conexão a cabo Ethernet (como o Xbox ou PS3, ver seção e respectivamente) tanto Wii quanto DS utilizam conexões sem-fio (utilizando o protocolo de rede ) e eles conectam a HotSpots públicos ou a APs. Entretanto a rede integrada do DS não suporta protocolos de segurança WPA, somente WEP. Diferentemente de outros serviços de jogos online, a NWC não possui uma loja digital, ao invés disto a Nintendo tem Wii Shop Channel ou o DS Shop. Desta forma a distribuição digital de cada console é gerenciada por aplicações diferenciadas.
38 23 Figura 16 - Nintendo Wii Console Figura 17 - Nintendo DS Handheld Funcionalidades Multiplayer match: Até dezesseis jogadores no Nintendo DS e até trinta e dois no Wii podem jogar juntos em modo online de graça. Worldwide Matchmaking: A NWC cria uma infraestrutura que possibilita aos jogadores criar e procurar partidas com diferentes opções. Leaderboards: Cada jogo pode ter sua própria lista de líderes para exibir qual jogador obteve mais pontos em uma partida deste jogo. Tournaments: Uma funcionalidade que permite a organização de torneios dentro de jogos para competir com amigos possuindo partidas no modo knock-out (o perdedor sai). Friend Codes: Esta é uma das funcionalidades unicast do NWC. Cada jogo (tanto no Wii quanto no DS) possui um número de identificação único (esteja atento que é cada jogo produto, não título), assim como cada jogador tem um ID único. Desta forma os dois podem ser combinados para criar este Friend Code. Este código possibilita adicionar outro amigo, se ambos em concordância, criando assim novas funcionalidades que seguem: Friend List: Uma lista onde os jogadores podem ver se outros amigos estão online e interagir com eles. Cooperative Play: Jogadores que adicionaram um ao outro com Friend Codes podem jogar juntos os desafios do jogo. mensagens. Text Chats: Um mensageiro instantâneo com o qual amigos podem trocar Voice Chats: Se o usuário possui os equipamentos necessários, ele pode falar com seu amigo registrado no Friend Codes.
39 24 Rivals: É uma funcionalidade similar ao Friend Codes, porém possibilita que um jogador memorize outro como seu rival (ao fim de uma partida) para jogar revanches. Pay & Play: Através desta opção é possível ter acesso aos DLC (Downloadable content) pagando o conteúdo com Nintendo Points. Funcionalidade que foi lançada em WiiConnect24: é a possibilidade de permanecer conectado a Internet até mesmo quando o console está em modo stand-by Matchmaking O matchmaking da Nintendo Wi-Fi Connection tem duas principais características, que são: é suportado entre amigos (ver Friend Code em seção 2.3.2) ou pode ser resultante de um processo com um jogador aleatório. Para a segunda opção, entretanto, possui um sistema de nivelamento de habilidade que tenta juntar jogadores que possuem níveis de experiência e habilidade em jogo; este é efetuado através dos servidores da Nintendo utilizando um sistema de mapeamento de habilidade criando o ambiente mais facilitado possível para usuários de quaisquer idades ou habilidades. Infelizmente especificações mais detalhadas sobre o funcionamento do sistema são confidenciais, não podendo ser expostas aqui. Apenas desenvolvedores oficiais da Nintendo possuem acesso aos manuais oficiais e a documentação que podem suprir esta informação.
40 3 METODOLOGIA 25 Essa seção é dividida em quatro partes principais: Estruturas de Rede, Exemplos de Conexões Socket, Organização de Seções de Rede e Processing (Desenvolvimento da demonstração). Os passos e estudos aqui apresentados são parte de um processo de contínuo aprendizado e pesquisa dos sistemas de rede atuais e da aplicação destes nos sistemas de rede descritos na seção 2 Estado da Arte. 3.1 Estruturas de Rede Para projetar uma aplicação de rede é necessário a priori entender o quão diferente o processo de rede pode ser dependendo de como cada tipo de aplicação é desenvolvida. A Figura a seguir demonstra as diferenças entre variados ambientes virtuais (VEs) e o relacionamento destes com diferentes gêneros de jogo. Figura 18 Relacionamento de simulações, VEs e jogos digitais com o genero do jogo. O significado desse processo de clusterização é tal que quanto mais um jogo está à esquerda (no campo de simulações e ambientes virtuais) mais importante é ter um tempo de resposta muito baixo, enquanto quebra-cabeças e jogos de tabuleiro, que estão localizados mais na porção direita do gráfico, podem sofrer atrasos maiores (também conhecido como lag pelos jogadores de rede).
41 26 A falta de um bom tempo de resposta em um jogo influencia drasticamente o desempenho do jogador, na Figura 19 nós podemos analisar as curvas de performance relacionadas diretamente a latência do pacote de rede. Com a finalidade de melhorar a latência e reduzir os requerimentos de banda existem inúmeras técnicas (as quais podem ser encontradas em [V]). Figura 19 Desempenho do jogador sob Diferentes Latências induzidas e para Diferentes Gêneros de Jogos. Não obstante disto, não apenas a troca da informação é importante, mas também onde esta é armazenada. Existem diversas arquiteturas para gerenciar mensagens; assim como outras diversas para gerenciar o armazenamento dos dados. A importância dessas arquiteturas muda principalmente dependendo da importância de cada jogador no jogo e as diferentes configurações de hardware (ou conexão) que podem ser encontradas. Por exemplo, a maioria das arquiteturas segue o modelo cliente-servidor. Neste modelo existe um jogador, referenciado como Host, que abre o jogo e espera que outros jogadores se unam a ele em jogo. Os outros jogadores que se unem a essa seção serão administrados e terão seus dados geridos pelo Host.
42 27 Neste caso, quando cada jogador entra no jogo, o Host precisará efetuar uma operação de handshake. Esse processo troca primeiramente dados sobre o novo jogador, informando-o da situação atual do jogo com informações necessárias para o jogador visualizar o jogo como o Host. Neste mesmo momento o Host precisa atualizar a informação de todos os outros clientes, devido à entrada de um novo jogador. Não apenas ao entrar em um jogo, mas também quaisquer ações que qualquer jogador tomar na partida terá de ser reenviado ao servidor (Host) e ele terá a necessidade de atualizar a informação a todos outros jogadores. Seguindo esta ideia fica claro que o número de dados que precisa ser enviado é sempre maior do que poderia ser, mas o processo sempre é sincronizado e controlado pelo servidor. Também se um jogador que é considerado o servidor tem um problema e consequentemente perde a conexão, a partida então irá certamente parar sendo que os outros jogadores não receberão nenhum tipo de resposta um do outro. Além disto, há outras arquiteturas, apresentadas na Figura 20, e cada uma delas tem seus pontos fortes e fracos. A melhor opção é sempre analisar cuidadosamente o tipo de jogo (gênero do jogo) para o qual a função de rede será desenvolvida. Figura 20 Níveis de desenvolvimento: (a) split-screen, (b) uma arquitetura peer-to-peer, (c) uma arquitetura cliente-servidor, e (d) uma arquitetura rede de servidores.
43 28 Por outro lado existe a arquitetura peer-to-peer (ponto-a-ponto) onde cada jogador troca informações diretamente com os outros jogadores, havendo a necessidade de uma banda realmente maior, já que cada jogador irá enviar a mensagem N-1 vezes (sendo N o número de jogadores). Entretanto nenhum dos jogadores é essencial para a continuação da partida, excluindo então os problemas gerados por jogadores que perdem a conexão. Por exemplo, quando o gênero do jogo é um tiro em primeira pessoa (FPS) é necessário que toda a informação seja concisa e o tempo de resposta o menor possível. Neste caso geralmente é escolhida a plataforma cliente-servidor, levando em conta que a experiência do jogador seria decrescida enormemente se fosse utilizada a configuração de peer-to-peer, devido ao fato da grande quantidade de dados na rede e que para alguns jogadores esta informação poderia chegar em tempos diversos, não levando em conta a possível perda de pacotes. Não é complicado perceber que conexões de peer-to-peer seriam melhores se tratando de números mínimos de jogadores, e servidores para números maiores, apesar disso é necessário ser considerado que no caso o servidor tem um trabalho maior a executar, assim como necessita de uma banda maior para lidar com todo o câmbio de mensagens. Figura 21 Fração de Servidores Aceitáveis versus Número de Clientes Jogando Simultaneamente para Diferentes Gêneros de Jogos
44 29 Entretanto a arquitetura rede-de-servidores pode sustentar diversos tipos de jogos, sendo que um servidor único não pode suportar o processamento de dados e o tempo de resposta de um jogo em questão. A Figura 21 exibe um gráfico de [VI] que avalia a capacidade de um número crescente de jogadores em um servidor mantendo uma experiência positiva de jogo. Não muito distante destas arquiteturas também encontramos as arquiteturas de dados da partida. Na Figura 22 é possível observar três diferentes tipos de arquiteturas: Centralizada, Distribuída e Replicadas. O porquê de estas serem separadas da organização de redes é para possibilitar a combinação entre elas de diversas formas. Figura 22 Na arquitetura de Centralizada o servidor de dados (nó) registra toda a informação. Na Replicada, cada nó gerencia uma replica de todos os dados. Na Distribuída, a informação é distribuída entre os nós. Não é incomum combinar diferentes designs, como a arquitetura clienteservidor com a base de dados Replicada, desta maneira o sistema pode verificar perda de conexão de jogadores e notificar se um jogador da partida perde sua conexão subitamente. Então o sistema começa um processo para alterar o host para outro jogador, já que todos eles dividem a mesma informação. Entretanto, o desenvolvedor precisa ser cuidadoso porque a consistência dos dados será controlada através de modelos de software, e o processo supracitado terá um grande impacto na largura de banda, adicionando muitos dados a serem enviados todo o tempo. Na verdade estes dois fatores, consistência e resposta, definem os modelos de arquitetura de controle e de dados.
45 30 Visando obter uma alta consistência, a arquitetura precisa garantir que todos os processos estejam rodando notoriamente sincronizados. Normalmente isso requer uma largura grande de banda, baixa latência e um pequeno número de nós remotos. Por outro lado, para obter uma alta responsividade (ou oportunidade [V]), os dados precisam ser processados o mais rápido possível, o que leva a baixa sincronia. Não apenas, mas para manter a responsividade alta diversos tipos de compressão de dados e outros algoritmos (para diminuir o envio de dados) são utilizados, levando a um peso computacional maior. A Figura 23 demonstra o problema. Um jogo está em execução em um nó local, ele envia uma mensagem de controle através do relay e obtém mensagens dele. Em troca o relay troca mensagem com outros nós através da rede (no caso especifico a Internet). Aqui o relay é um conceito lógico que expressa como o controle pode afetar os dados. Figura 23 Arquiteturas definem como as mensagens são chaveadas entre nós locais e remotos. Além disto, a quantidade de banda também é medida dependendo da técnica de transmissão, como vemos na Figura 24. Antigamente, nos tempos de implementação em LAN, era comum utilizar de técnicas de Broadcast (c), enviando mensagens a todos os usuários da rede [VII]. É claro que isto nos leva a problemas maiores quando um número de participantes aumenta. Entretanto as mensagens geralmente tinham mais de apenas um destinatário, sendo então um desperdício enviar em Unicast (a) para diversos usuários. Então nos anos 90 a arquitetura Multicast (b) [VIII],que é um meio-termo entre Broadcast e Unicast, surgiu, permitindo que usuários se unissem a grupos de interesse. O usuário então envia uma mensagem a um grupo, semelhante ao Unicast, e o grupo recebe a informação, da mesma forma que em Broadcast. Assim o Multicast se tornou fortemente aplicado nos sistemas de rede para jogos digitais.
46 31 Figura 24 Técnicas de transmissão Adicionado, um problema muito comum que é encontrado quando conexões de Internet são gerenciadas, é o endereçamento de um jogador em específico para o envio da mensagem. O problema é gerado devido ao fato de muitos usuários utilizarem roteadores ou servidores Proxy que dividem suas conexões, método ainda mais popularizado para conexão de dispositivos Wi-Fi (APs). A Figura 25 expõe um exemplo de jogadores diferentes utilizando (e não) servidores Proxy. Figura 25 Distribuição de um ambiente de jogo
47 32 O método que governa, na Internet, sobre a interpretação de endereços privados de rede para endereços IP é o NAT. Como definido em [IX]: Network Address Translation é um método pelo qual endereços IP são mapeados de um reino a outro, na tentativa de fornecer rotas transparentes a hosts. Tradicionalmente, dispositivos NAT são utilizados para conectar endereços isolados com endereços privados não registrados a um único e global endereço externo. (Tradução livre). Aplicações de rede precisam de um IP externo para se comunicar, com este propósito foi criado o STUN (Simple traversal UDP over NATs) que classifica as implementações NAT como: Cone Completo (Fig. 26), Cone Restrito (Fig. 27), Cone de Porta Restrita (Fig. 28), e Simétrico (Fig. 29). Figura 26 - Full Cone NAT Figura 27 - Restricted Cone NAT Figura 28 - Port Restricted Cone NAT Figura 29 - Symmetric NAT Entretanto estes procedimentos foram reprovados de um estado padrão, desde que muitos dos métodos se provaram ineficientes ou inadequados para classificar diversos dispositivos. Um novo padrão foi formalizado na RFC 5389 em Outubro de 2008 e agora o acrônimo STUN significa: Session Traversal Utilities for NAT. Por sorte os sistemas de rede em questão neste trabalho conseguem trabalhar nos mais comuns usos de NAT e possibilitam a comunicação unicast para consoles. Apesar de que em algumas situações o direcionamento de portas (Port Fowarding) deva ser configurado.
48 Exemplos de Conexão de Socket Nesta seção é explicado o básico para se estabeler uma conexão entre dois dispositivos utilizando um Socket. Como definido em Um par de socket para conexões TCP é uma quadrupla-tupla que é definida por dois pontos finais de conexão: O endereço IP local, porta local, endereço IP externo e porta externa. Um par socket identifica exclusivamente toda conexão TCP de uma rede. (Tradução Livre). Antes de tudo, todos os conceitos sobre sockets em TCP podem ser estendidos ao UDP, como citado também em [IX], e esse processo é comum sendo que um dos pontos principais em jogos é diminuir o pacote de dados e minimizar o uso da banda, aparte que perder pacotes não seria tão problemático já que o fluxo de dados é continuo, e sobrescreveria os pacotes antigos com novos em um curto espaço de tempo. Entretanto uma mensagem de ACK pode ser utilizada para mensagens essencialmente importantes. O exemplo aqui apresentado demonstra o uso básico de sockets para construir uma aplicação simples de Cliente-Servidor que será necessária para entender as comunicações de baixo nível que acontecem em Sistemas de Rede. Mais detalhes são descritos na Seção 4 Resultados. Primeiro, nós devemos entender como o servidor socket deve funcionar. Para isso utilizaremos de estruturas socket que são definidas em um ambiente C/Unix, as quais podem variar em outras plataformas, não alterando o conceito aqui visto. A conexão por parte do servidor deve ser aberta e então esperar por uma conexão do cliente, logo, uma porta deve ser especificada, conforme o exemplo da figura abaixo: Figura 30 Servidor Socket com uma abertura passive na porta 21.
49 34 Para elaborar o processo de escuta o socket precisa ser criado e depois alterado seus parâmetros, o método BIND deve ser chamado, este método na verdade liga um socket à porta, como podemos ver no código abaixo [X]. hints.ai_family = AF_UNSPEC; // set to AF_INET to force IPv4 hints.ai_socktype = SOCK_DGRAM; hints.ai_flags = AI_PASSIVE; // use my IP if ((rv = getaddrinfo(null, MYPORT, &hints, &servinfo))!= 0) { fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); return 1; // loop through all the results and bind to the first we can for(p = servinfo; p!= NULL; p = p->ai_next) { if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { perror("listener: socket"); continue; if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) { close(sockfd); perror("listener: bind"); continue; break; if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1, 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) { perror("recvfrom"); exit(1); Neste caso nós criamos um socket na primeira função destacada, e logo depois disto nós conectamos o socket a um endereço, isto é feito através da define MYPORT, que é a porta de escuta da conexão. O próximo passo é estudar como o cliente irá se juntar a este servidor, através dos parâmetros de conexão do IP e a porta bem definidos. No código destacado em terceiro lugar, vemos o servidor esperando por uma conexão no socket recém-criado.
50 35 Na Figura 31 nós temos uma simulação do que aconteceria quando um cliente requisita a conexão ao servidor. Para tal o cliente precisa saber a priori o endereço do servidor e a porta que fora aberta. Depois disto ele também precisa abrir um socket, com toda a informação sincronizada do servidor, neste momento o cliente conecta seu socket ao do Server, criando um par de sockets. Figura 31 Solicitação de Conexão de um cliente à um servidor. O código a seguir é uma implementação simples de um cliente que pode nos fornecer os requerimentos necessários. Mantenha em mente que estes códigos estão focados em conexões UDP, portanto utilizando datagramas ao invés de um modelo streaming de TCP cliente-servidor. memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; { if ((rv = getaddrinfo(serverip, SERVERPORT, &hints, &servinfo))!= 0) return 1; // loop through all the results and make a socket for(p = servinfo; p!= NULL; p = p->ai_next) { if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { perror("talker: socket"); continue; break; if ((numbytes = sendto(sockfd, argv[2], strlen(argv[2]), 0, p->ai_addr, p->ai_addrlen)) == -1) { perror("talker: sendto"); exit(1);
51 36 De fato é preciso estar muito claro que a solicitação não necessariamente é feita ao mesmo Server que irá fechar a conexão. É comum que quando um servidor reconhece uma solicitação, ele invoca um fork, criando outro processo que então ira gerir a conexão (como podemos evidenciar na figura a seguir). Figura 32 Servidor repassa a gerenciar da conexão para um filho Este método é então repetido toda vez quem um novo cliente tenta criar uma nova conexão com o servidor (Figura 33). Desta forma o servidor pode responder individualmente para cada cliente e tem o controle de todos os envios de mensagens e recebimento. É fortemente sugerido o uso de design patterns [XI] como Singleton para o gerenciamento de múltiplas threads na aplicação. Figura 33 Uma segunda solicitação de conexão com o servidor.
52 3.3 Organizações de Seções de Rede As seções são organizadas em quatro níveis: Servidor, Mundo, Lobby e Salas, conforme o esquema a seguir: 37 Figura 34 Componentes de um Sistema de Redes User: Refere-se ao usuário do sistema de rede. Server: O servidor compreende o nível mais alto de um sistema de rede. Ele fornece as funções de Matchmaking para ser utilizadas nos aplicativos. Um ou mais servidores podem ser alocados para cada aplicação. Server Context: O contexto de um servidor de um sistema de rede precisa ser criado por um usuário quando este acessa o sistema. Um usuário que criou um contexto será consequentemente apto a acessar o sistema de rede. World: Um mundo representa o espaço de um Matchmaking. Funções de sistemas de rede (como obter Lobbies ou procurar Salas) são executadas por lobbies e salas, respectivamente, quando pertencentes a um mundo. Session: Uma seção é o termo coletivo para lobbies e salas. Lobby and Lobby Rooms: Um lobby pertence ao mundo. É um espaço que o usuário pode entrar, comunicar-se com outros membros interno, e fazer uso de funções de matchmaking. Um lobby fornece funções de comunicação entre os membros, podendo ter mais membros que salas.
53 38 Estes diversos níveis permitem o desenvolvimento de diferentes configurações para oferecer a melhor experiência para um gamer especificando-se de acordo com o gênero do jogo. Por exemplo, podem ser utilizadas três configurações básicas: Procurando por uma Sala, Utilizando Lobbies ou Utilizando Todos os Níveis, como veremos a seguir Procurando por uma Sala Figura 35 Configuração quando usando Funções de Procura de Sala Nesta configuração o usuário não é ciente de quantos mundos ou servidores são utilizados. É a configuração mais próxima do Matchmaking feito automaticamente pelo TrueSkill (ver seção ). Basicamente o usuário precisa criar um certo número de atributos para então procurar uma sala compatível com estes atributos. O sistema então responde com uma lista de quantas salas satisfazem o critério estabelecido na busca, dando a resposta final para o jogador selecionar a sala desejada. Neste ponto, informações relevantes, além daquelas fornecidas na busca, são exibidas para uma escolha de sala mais adequada. Do ponto onde um usuário é conectado a uma Sala, é possível estabelecer uma conexão peer-to-peer com outros usuários, e então trocar dados relativos ao jogo. A figura abaixo demonstra o esquema que deve se assimilar à operação básica de procura por uma Sala.
54 39 Figura 36 - Design de uma Aplicação que Utiliza a função de Busca por uma Sala Utilizando Lobbies Os Loobies estão em um nível acima daquele das Salas, isto é, um usuário primeiro se conecta a um Looby e então poderá entrar em uma Sala. Um exemplo muito popular desta configuração pode ser encontrado no sistema Battle.net [XII], que foi criado pela empresa Blizzard para suportar a rede de jogadores de um dos mais populares jogos de estratégia. Figura 37 Configuração quando utilizando Lobbies
55 40 Depois da seleção de um Lobby, o usuário poderá ser capaz de ver outros usuários que estiverem conectados aquele Lobby e então interagir entre eles, conversando e obtendo informações de cada um. A opção de criar Salas deve estar disponível, e da interface de criação de Salas outro usuários podem ser convidados à nova sala. Deste ponto em diante as negociações acontecem de forma semelhante às anteriores (seção Procurando por uma Sala) e os jogadores na mesma sala conseguem iniciar conexões P2P e iniciar a troca de dados. A Figura abaixo exemplifica com um esquema de procedimentos esperados. Figura 38 Design de uma Aplicação Utilizando Lobbies
56 Utilizando Todos os Níveis Este tipo de configuração é dificilmente recomendado, devendo ser utilizado somente se o jogo está sendo projetado para um número enorme de jogadores online. Por exemplo, MMORPG (Massively Multiplayer Online RPG) o qual gerencia milhares de jogadores ou até jogos de tiro muito populares, requerem uma latência muito baixa para jogar. Figura 39 Configuração quando Utilizando Todos os Níveis. Desta forma o servidor pode ser criado para distinguir diferentes localidades, como pode ser observado na Figura 40, com a finalidade de organizar jogadores com baixas latências próximos um do outro. Além disto, Loobies que são nomeados pelos níveis dos jogadores (iniciantes ou profissionais) ou diferentes lugares visuais podem aprimorar a experiência do usuário. O jogador então deve selecionar um servidor, um mundo e uma seção para jogar, nesta ordem: Selecionar um servidor da lista de servidores Selecionar um Mundo da lista de Mundos daquele servidor Selecionar um Looby da lista de Lobbies daquele Mundo Criar uma Sala que pertença ao Lobby, ou selecionar e entrar em uma Sala através de uma pesquisa das Salas daquele Looby.
57 42 Figura 40 - Design de uma Aplicação Utilizando Todos os Níveis
58 Processing Para o desenvolvimento do nosso cliente, no exemplo de comunicações partimos então para o estudo de diversas APIs que se demonstravam facilitadoras no processo de desenvolvimento de um rápido protótipo. Entre elas algumas se destacavam como o Microsoft XNA [XIII], o Adobe Flash [XIV] e o Processing [XV]. Tendo em conta o cunho do desenvolvimento em código-livre deste exemplo, optamos pelo Processing já que este detém de todas as ferramentas de desenvolvimento gratuitas e livres, além de ter sido sujeito de práticas em um dos cursos ministrados na universidade pelo Prof. Dr. Ricardo Nakamura, criando então uma familiarização maior com a ferramenta por si só. O processo de instalação do Processing é extremamente simples e eficaz, apesar de contar com a disponibilidade de ser utilizado em diversas plataformas, como Windows, Linux e Mac, neste trabalho apenas utilizamos a versão para Windows 32bits. Foi importante também notar que o Processing possui uma IDE de edição de códigos própria (como vemos na Figura 41), o que facilita desenvolvimentos curtos de rápida prototipagem, entretanto a API também permite ser adicionada a projetos Java na IDE Eclipse [ XVI] possibilitando uma maior organização e desenvolvimento de projetos de maior escala. Em meio ao desenvolvimento de uma aplicação para exemplificar as características de um jogo em rede foi possível encontrar uma biblioteca interna ao Processing, chamada Vanilla, a qual em teoria supre as necessidades de um desenvolvimento multi-jogador, através de processos semelhantes aos descritos neste trabalho.
59 44 Figura 41 - IDE fornecida pela API Processing Então foi decidido que uma extensão do protótipo seria elaborada tal que ele pudesse se utilizar da biblioteca padrão do Processing, então a avaliando e verificando se os conceitos estudados neste trabalho podem ser aplicados a ela (a biblioteca). Não excluindo o desenvolvimento de meios suficientes e necessários para fazermos as conexões acessando as opções de criação de socket de baixo nível. No Anexo A e B um código em Java de um protótipo desenvolvido com o uso do Processing e de sua biblioteca de rede pode ser encontrado. Como pode ser visto o processo é simples e bem estruturado, porém notamos diversos problemas quanto ao desempenho da biblioteca de rede. Nosso protótipo é um jogo simples onde os jogadores podem colidir utilizando um objeto controlável com outros objetos que são automaticamente criados.
60 45 Figura 42 - Protótipo de Jogo: O quadrado amarelo é o personagem controlável, o branco o remoto, e os azuis automaticamente criados. Para este projeto então foram definidas duas aplicações, uma primeira que serviria como o servidor, criando os objetos automaticamente e abrindo um servidor em uma porta desejada, esperando a conexão do cliente. Por sua vez a aplicação cliente tem a estrutura semelhante a do servidor, porém ela lê através da conexão de rede a posição dos objetos criados pelo servidor, que é enviado em uma string através da rede, e respondendo com a posição de seu jogador (o objeto que pode ser movido). Por exemplo, se o jogo está rodando com uma taxa de quadros por segundo superior a 15 fps (quadros por segundo), as mensagens começam a se perder e consequentemente ambas as aplicações não conseguem interagir, acarretando em um erro fatal que fecha a conexão e o cliente trava. Partimos então para a elaboração de nosso sistema implementando as conexões em socket de baixo-nível. Para tal nos utilizamos de vários exemplos disponíveis na internet, como os quais já estudados na Seção 3.2 (Exemplos de conexão Socket), e foi programado através das bibliotecas padrão do Java uma conexão Socket seguindo a topologia cliente-servidor. É importante deixar claro que o servidor é indicado de ser utilizado em uma máquina mais potente, justo, pois a implementação mais adequada é tomando uso de múltiplas threads, para poder carregar as informações de rede sem a interrupção do ciclo de funcionamento normal do jogo.