Por onde começar a codificação das classificações online?


7

NUNCA, NUNCA fiz nenhum tipo de código de rede em C ++, não conheço nem as bibliotecas que existem, mas uma demanda popular para o meu jogo são tabelas de classificação on-line ...

Então, em que tipo de bibliotecas eu deveria pesquisar?

Meu jogo é multiplataforma (win, gnu, mac), usa C ++, ClanLib 1.0 e Lua. Além disso, o mecanismo é zlib (portanto, coisas proprietárias que não posso liberar a fonte não funcionam)


3
Minha primeira recomendação seria "não use C ++ para um servidor de cabeçalho". Implemente-o em um idioma de nível superior, que geralmente oferecerá funcionalidade para cuidar de handshakes, sessões e outros. A maioria deles permite a comunicação via SOAP, que é facilmente suportada em C ++, para que seu cliente possa usá-lo para entrar em contato com o servidor. Pessoalmente, estou criando meu sistema de cabeçalho genérico no .NET WCF (C #).
Elideb

Respostas:


6

Primeira pergunta, quanto você se importa com trapaça? Fazer um webapp simples para placares de líderes é provavelmente muito fácil, mas será instantaneamente eliminado o spam. Eu encararia o curl como uma biblioteca HTTP assíncrona decente, que você poderá integrar em praticamente qualquer código de cliente. Para o lado do servidor, presumo que você não tenha orçamento para servidores dedicados, portanto, o Google App Engine pode ser uma boa combinação se você conhece Python ou Java.


Eu uso segundo o Google App Engine. Mesmo que seu jogo se torne muito popular, você ainda poderá ajustá-lo facilmente no nível gratuito. Além disso, nunca ter que se preocupar com a plataforma do servidor é uma enorme vantagem.
Drxzcl 31/08/10

O problema é que o jogo em si não tenho idéia de como evitar trapaças ... Quero dizer, provavelmente é fácil de executar o Cheat Omatic (procure esse software, é bem legal) e edite as pontuações, ou qualquer outro número na memória (na verdade, usando-o, eu poderia criar mais unidades do que o normalmente permitido no Age of Empires, por exemplo).
speeder

Há algo como o Google App Engine que não usa python ou java? Eu sei bazilhões de idiomas, mas não os dois: /
speeder 31/08

Não é grátis. Existe o Heroku, se você conhece o Ruby / Rails, e ouvi dizer que não é muito caro. Quanto à prevenção de trapaça, eu precisaria saber muito mais sobre o jogo. O PunkBuster e o Anticheat da Valve podem ser opções para o fortalecimento do cliente, mas você precisará de algum tipo de solução baseada em servidor se quiser ter certeza. Como alternativa, basta ter entradas nas tabelas de classificação após uma semana ou mais, a maioria dos spammers perderá o interesse.
Coderanger 31/08/10

3

Tudo começa com o design do protocolo. O que você precisa transmitir através do fio? Que tipo de aperto de mão e mecanismos de verificação são necessários? Pode ser tão simples quanto um pacote de rede é enviado toda vez que um jogo termina. Simplesmente conteria o nome de usuário com a pontuação, por exemplo{ "Joel", "33" }

O problema é que, como você confirma que a pontuação foi alcançada de maneira legítima? Talvez alguém tenha simplesmente analisado seus pacotes de protocolo com um analisador de rede e concluído que apenas um nome de usuário com a pontuação é enviado. Então ele cria manualmente esse pacote e o envia. Isto é o que o coderanger quis dizer com "ficando spam fora da existência".

Quanto ao armazenamento do próprio placar, eu recomendaria o uso de um banco de dados, como o SQLite. Isso fornece um mecanismo de economia / acesso seguro para threads e simultâneo à tabela de classificação. O banco de dados subjacente cuida da sincronização.

Para o código de rede em si, você precisa de duas partes. Algo para enviar os dados para o servidor e algo que os consome e processa no lado do servidor. Como a coderange mencionou, poderia ser algo tão simples quanto HTTP / XML / JSON HTTP GET / POST e, em seguida, um servidor da Web em execução no servidor consumiria isso em um serviço da Web. A parte boa é que você não precisa lidar com nenhum código de rede do lado do servidor, pois isso é resolvido pelo servidor da web.


MySql iria funcionar? O país onde eu moro hospedagem MySQL é bem comum e barato (bem, meio barato).
speeder

Absolutamente. Quase qualquer banco de dados se adequaria a esse cenário.
randomguy

1

Pela minha experiência, há várias etapas pelas quais você terá que passar. A escolha de bibliotecas C ++ não é a mais urgente delas. Há coisas mais importantes que você terá que considerar.

Hospedagem

Em relação à hospedagem da sua tabela de classificação, você terá que fazer uma escolha. Você aluga servidores e pode escolher as tecnologias que deseja e fazer o que quiser. Ou você aluga um espaço de hospedagem e terá que trabalhar com os técnicos à sua disposição. Ou você usará uma das soluções em nuvem e precisará trabalhar com as restrições e vantagens delas.

É tudo uma questão de investimento em tempo de custo e reutilização. Se você já possui um servidor, pode tentar hospedar seus placares de líderes lá. Se você já usa um site hospedado, pode começar a criar protótipos com ele.

Pessoalmente, eu recomendaria alugar um servidor ou servidor virtual primeiro.

Essa pergunta merece um tópico próprio e deve ser respondida independentemente, se você tiver dificuldade em lidar com isso.

Serviço

As tecnologias de servidor que você usará dependem de você e dependem muito das soluções de hospedagem que você escolher.

DB

Claro que você pode começar com um armazenamento SQL, o MySQL é bastante barato, eficiente e simples de usar, suportado pela maioria dos provedores de hospedagem. Esta é a solução que tenho usado. Mas tenha cuidado quando se trata de escalabilidade, você pode se arrepender de usá-lo mais tarde.

Existem outras soluções melhores. Os servidores de banco de dados baseados em ERLANG, como o CouchDB, são bastante populares. Um deles, o RIAK é simples de distribuir em vários servidores, eficiente, usa JSON e é usado por grandes nomes como Mozilla e GitHub.

Processo interno

Você não concederá acesso ao seu armazenamento de dados diretamente de seus aplicativos clientes. Você precisará escrever um aplicativo para gerenciar autenticações, autorizações, algumas lógicas e acesso ao banco de dados.

Java, PHP e perl são frequentemente usados ​​para escrever serviços da web que fornecem essas funções, são bem suportados por provedores de hospedagem e têm fortes comunidades de desenvolvedores.

Mas se você deseja evitar a sobrecarga de um servidor HTTP completo como o Apache, deve usar o nodeJS . É uma pegada baixa muito eficiente e uma solução rápida. Usado pelo e-bay, Microsoft e Linked-In. Ele se integra muito bem às configurações que usam JSON para troca de dados.

Projeto

O design do seu cabeçalho começará com o armazenamento de dados. O que você quer armazenar? Como você deseja armazená-lo e por quanto tempo?

Você deseja armazenar as pontuações, é claro (tempo, distância, pontos ...), mas com isso você tem vários níveis? você precisará armazenar os IDs de nível. Você suporta várias plataformas? Nesse caso, a dificuldade do jogo pode ser diferente em plataformas diferentes por razões técnicas ou demográficas, você também armazenará isso ...

Como você quer machucá-lo? Deseja manter apenas as melhores pontuações, substituindo todas as anteriores realizadas pelo jogador na mesma plataforma / nível / contexto? Ou você armazenará tudo para acompanhar todas as pontuações possíveis? Você manterá as pontuações anteriores descartadas para mineração de dados?

Depois de responder a essas perguntas, você pode começar a pensar na implementação.

Protocolo

Você deseja transferir dados de e para os clientes. Para isso, você precisará criar um bom protocolo de comunicação.

A escolha dos protocolos subjacentes é secundária nesta etapa (HTTP, TCP, UDP). Seja qual for sua escolha, você terá que elaborar seu próprio protocolo com cuidado para poder lidar com erros, alterações no protocolo, atualizações de aplicativos, etc.

Portanto, verifique se o aplicativo do servidor pode lidar com o fornecimento de dados para aplicativos atualizados e aplicativos que executam versões mais antigas também.

Certifique-se de proteger os dados transferidos de e para o servidor. Tenha cuidado ao proteger os uploads de pontuação, você pode usar chaves de hash, criptografia e outros mecanismos para proteger seu servidor de trapaceiros.

Qualquer que você escolha enviar dados binários ou de texto (JSON, XML), é com você. Mas, para flexibilidade e compatibilidade, eu recomendaria o JSON. Evite XML. Use binário se você realmente precisa / deseja.

Este tópico merece mais atenção e você pode ter mais perguntas ...

Cliente

O cliente terá que se integrar à sua solução. Você não deve escolher as camadas de protocolo e tecnologia do servidor com base no idioma do cliente. Você deve integrar sua solução de servidor ao seu jogo.

Se você escolheu JSON sobre HTTP, existem bibliotecas para isso.

Existem bibliotecas C / C ++ para JSON, eu recomendaria usá-las. Você pode escrever o seu próprio, se quiser. Eu escrevi uma pequena biblioteca JSON em questão de horas. Agora é usado em jogos em dezenas de plataformas.

Em relação ao HTTP em C ++, use algo mais moderno que o CURL. cpp-netlib deve fazer.

Cuidado com as codificações de caracteres etc. ao enviar os dados.

Autenticação

Para poder armazenar e exibir as melhores pontuações para seus usuários, eles precisam ser identificados de alguma forma. Existem várias maneiras.

O mais simples é nenhum. Use o campo Digite o nome aqui para exibir os nomes no placar.

Você também pode pedir aos jogadores que se registrem ... esse é um processo que desencoraja os jogadores.

Uma maneira de usar muito é a autenticação do Facebook. Dessa forma, você pode passar os dados de autenticação para ou através do servidor e obter dados sobre os amigos e servir tabelas de líderes personalizadas, como Tabela de classificação global, Tabela de classificação de amigos ...


0

Lado do cliente: o aplicativo ou jogo usa uma lib http como libcurl ou o pacote sfml-network. Lado do servidor: Uma solução simples com php e mysql, postgresql ou sqlite3. Os arquivos php estão ocultos ou inacessíveis ao usuário.


Essa resposta pode ser melhorada escrevendo sobre como usar essas tecnologias, em vez de apenas listá-las.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.