Arquitetura para jogo de browser multijogador sociais (escolha backend + frontend escolha [flash / Silverlight]) [fechado]

StackOverflow https://stackoverflow.com/questions/638272

Pergunta

Estou pensando em desenvolver on-line jogo multiplayer social. O estado compartilhado do mundo exigiria algo rápido no backend, por isso as possíveis soluções parecem ser:

  1. motor de jogo rápido no servidor (ex. C ++) e alguma linguagem frontend (php / python / ruby) + Flash

  2. pilha inteira no pitão (usando python torcido ou stackless) + inflamação

  3. NET (asp.net ou asp.net mvc) + inflamação

  4. NET + silverlight

primeiro pode ser um exagero do ponto de vista da produtividade (3 camadas heterogéneas)

Nr. 4 pode ser o céu (ambiente comum em todas as camadas) do programador, mas:

  • Não há tal coisa jamais foi construído com Silverlight, talvez haja algumas showstoppers escondidos em torno do canto
  • Pode ser difícil encontrar o Silverlight estilistas
  • Apesar do Flash modelo de filme / clipe sendo criticado quando comparado com SL arquitetura completa OO não é uma vantagem quando se trata de conceber peças extras do mundo virtual por designers externos? Eles podem simplesmente preparar .swf com, por exemplo. 4 perspectivas de um item em 4 quadros -? Não seria mais difícil com SL
  • Silvelight aparentemente carece de algumas características de jogos (como detecção de colisão)

O que você acha?

[EDIT] O jogo em si seria parte do maior portal -., Portanto, seria bom para integrar o motor com algum framework web

Foi útil?

Solução

Opção 2 - usando stackless Python -. É o que usos EVE Online

http://support.eve-online.com /Pages/KB/Article.aspx?id=128


Editar

Até que você tenha software real, é claro, é impossível criar uma arquitetura que executa razoavelmente bem. Assim, qualquer julgamento aqui é especulação apenas ocioso.

Considere o seguinte, no entanto.

  1. conteúdo estático (arquivos .js, Css, de .png, etc.) tendem a dominar a sua largura de banda de rede. Você terá que usar um servidor proxy reverso (por exemplo, lula) para lidar com isso.

  2. Squid tem que obter o conteúdo de algum lugar. Você quer um servidor de arquivos leve fornecimento do conteúdo estático para lula. Nginx ou lighttpd ou algo assim. Apache irá trabalhar para isso, mas - até certo ponto -. Isso pode ser um exagero

  3. Seu conteúdo dinâmico - parece -. Será em duas formas

    • JSON para suportar o jogo.

    • HTML para apoiar o portal.

    Para isso, você seria mais feliz com um motor mod_wsgi. Apache certamente faz isso; ngingnx e lighttpd também pode funcionar.

    • Seu material JSON deve ser um conjunto de URI do. REST é um padrão de design bom. Através mod_wsgi, estes conexão ao servidor orientada para o jogo usando - se necessário - stackless Python. Seu front-end (Apache, por exemplo) tem uma localização, diretório ou virtualhost para filtrar esses URI e encaminhá-los a um mod_wsgi daemon que serve o jogo. Olhada Wekzeug para construir este.

    • Seu material HTML é um outro conjunto de URI do. Através mod_wsgi, estes conexão a um servidor de Django em execução Python convencional. Seu front-end (Apache, por exemplo) tem uma localização, diretório ou virtualhost para filtrar estes de URI e encaminhá-los a um mod_wsgi daemon.

Outras dicas

Passei um ano trabalhando em um jogo multiplayer on-line usando o Silverlight para o frontend e Python para o backend (I realmente utilizado IronPython em Silverlight assim como para o desenvolvimento simplificar)

Silverlight é muito bem adaptado para isso, eu não faria um jogo on-line sério em qualquer outra coisa. Ela já tem 35% do mercado, pelo tempo que você terminar de desenvolvimento que deve ser alta o suficiente para não importar muito mais. Para jogos sérios, a maioria das pessoas realmente não vai se importar a instalação de um plugin para o navegador 4MB. Se você quer apenas um pouco clone de asteróides, o uso de flash.

Se eu tivesse que fazer tudo de novo, eu acho que eu iria manter Python para o servidor, porque é a tecnologia de servidor que eu estou mais qualificados com, mas eu acho que eu usaria C # no frontend e usar JSON para passar dados .

O melhor conselho que posso dar é:

  1. Fazer uso de bibliotecas e códigos existentes, tanto quanto possível
  2. Não pense sobre o desempenho prematuramente

A parte mais difícil vai ser terminar o jogo, tecnologia de uso que você conhece bem, e otimizar o seu tempo, não o código. Esperamos que você pode fazer o que eu não poderia - terminar o jogo maldito:)

Editar

No que diz respeito porque eu uso C # se eu tivesse que fazer tudo de novo:

IronPython teve as suas vantagens e desvantagens. Foi ótimo que eu poderia compartilhar arquivos de código (constantes, modelos, etc.) através de servidor e cliente. Fazer uma mudança e atualizar o navegador para ver foi incrível. A depuração não foi tão simpática como C #.

Mas, em alguns aspectos, é uma segunda classe cidadão a C #, ligação de dados não funcionou, e você não pode usar classes IronPython em XAML. O tempo de carregamento foi um problema, então eu realmente passou um grande esforço para configurar a importação em paralelo em threads em segundo plano para acelerá-lo. Por causa da segunda estatuto de cidadão onde xaml está em causa, eu usei uma linguagem de modelo para gerar o XAML como se fosse html, o que realmente funcionou melhor do que a ligação de dados, mas nenhum modelo de línguas python trabalhou em IronPython, então eu escrevi o meu próprio ( outra hora pia.)

Para ativar o compartilhamento de modelos que eu tinha que escrever meu próprio ORM. Isso foi fácil o suficiente. Mas, para transferi-los passei em JSON e fez um formato binário optimizada vez que funcionou entre IronPython e Python. Essa foi outra pia tempo.

Em retrospectiva eu ??não deveria ter se distraído por todas aquelas trilhas de coelho.

torcida tem sido utilizado para este fim com sucesso. Baseando-se em chamadas asynchronius é muito eficiente para aplicações que requerem conexões persistentes. Também tem uma boa implementação RTMP para uso com flash. Verifique chesspark, é construído com Twisted:

http://www.chesspark.com/

Além disso, o motor de jogo realmente não tem que estar em c / c ++. Depende da complexidade e do tipo de jogo. Mas há também a biblioteca pygame que é muito bom.

Pessoalmente eu desanimá-lo de usar o Silverlight. O plugin do flash é muito melhor adotada e continuará a ser no futuro previsível, especialmente aos não ms sistemas operacionais. Não tome isso a sério, mas eu não instalar o Silverlight só para ver o seu jogo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top