Architettura per browser multiplayer social (scelta backend + scelta frontend [flash / silverlight]) [chiuso]

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

Domanda

Sto pensando di sviluppare un social game multiplayer online. Lo stato condiviso del mondo richiederebbe qualcosa di veloce sul backend, quindi le potenziali soluzioni sembrano essere:

  1. motore di gioco veloce sul server (ad es. c ++) e un linguaggio front-end (php / python / ruby) + flash

  2. intero stack in python (usando python twistato o stackless) + flash

  3. .NET (asp.net o asp.net mvc) + flash

  4. .NET + silverlight

il primo può essere un eccessivo dal punto di vista della produttività (3 strati eterogenei)

Nr. 4 può essere il paradiso del programmatore (ambiente comune su tutti i livelli), ma:

  • Nessuna cosa del genere è mai stata costruita con Silverlight, forse ci sono alcuni showtopper nascosti dietro l'angolo
  • Potrebbe essere difficile trovare designer di Silverlight
  • Nonostante sia stato criticato il modello di film / clip Flash rispetto all'architettura SL OO completa, non è un vantaggio quando si tratta di progettare parti extra del mondo virtuale da designer esterni? Possono semplicemente preparare .swf con es. 4 prospettive di un oggetto su 4 frame: non sarebbe più difficile con SL?
  • A quanto pare Silvelight manca di alcune funzionalità di gioco (come il rilevamento delle collisioni)

che ne pensi?

[EDIT] Il gioco stesso sarebbe parte del portale più grande, quindi sarebbe bello integrare il motore con qualche framework web.

È stato utile?

Soluzione

L'opzione 2 - utilizzando Python senza stack - è ciò che utilizza Eve Online.

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


Modifica

Fino a quando non si dispone di un vero software, ovviamente, è impossibile creare un'architettura che funzioni ragionevolmente bene. Quindi, qualsiasi giudizio qui è solo speculazione oziosa.

Tuttavia, considera quanto segue.

  1. I contenuti statici (file .js, .css, .png, ecc.) tendono a dominare la larghezza di banda della rete. Dovrai utilizzare un server proxy inverso (ad esempio, calamari) per gestirlo.

  2. Squid deve ottenere il contenuto da qualche parte. Volete un file server leggero che fornisca contenuto statico a calamari. Nginx o lighttpd o qualcosa del genere. Apache funzionerà per questo, ma - in una certa misura - potrebbe essere eccessivo.

  3. Il tuo contenuto dinamico - sembra - sarà in due forme.

    • JSON per supportare il gioco.

    • HTML per supportare il portale.

    Per questo, saresti più felice con un motore mod_wsgi. Apache lo fa certamente; Anche ngingnx e lighttpd potrebbero funzionare.

    • Il tuo materiale JSON dovrebbe essere un insieme di URI. REST è un buon modello di design. Tramite mod_wsgi, questi si collegano al server orientato al gioco utilizzando, se necessario, Python stackless. Il tuo front-end (Apache, ad esempio) ha una posizione, directory o virtualhost per filtrare questi URI e indirizzarli a un demone mod_wsgi che serve il gioco. Guarda Wekzeug per creare questo.

    • Il tuo materiale HTML è un altro set di URI. Tramite mod_wsgi, questi si collegano a un server Django che esegue Python convenzionale. Il tuo front-end (Apache, ad esempio) ha una posizione, una directory o un virtualhost per filtrare questi URI e indirizzarli a un demone mod_wsgi.

Altri suggerimenti

Ho trascorso un anno a lavorare su un gioco online multiplayer di massa usando Silverlight per il frontend e Python per il backend (in realtà ho usato IronPython in Silverlight per semplificare lo sviluppo)

Silverlight è molto adatto per questo, non farei un serio gioco online in nessun altro. Ha già il 35% del mercato, quando avrai finito di svilupparlo dovrebbe essere abbastanza alto da non avere più importanza. Per i giochi seri, alla maggior parte delle persone non dispiace installare un plug-in per browser da 4 MB. Se vuoi solo un piccolo clone di asteroidi, usa il flash.

Se dovessi farlo, penso che terrei Python per il server, perché è la tecnologia server di cui sono più abile, ma penso che userei C # sul frontend e userei JSON per passare i dati .

Il miglior consiglio che posso darti è:

  1. Utilizza le librerie e il codice esistenti il ??più possibile
  2. Non pensare alle prestazioni prematuramente

La parte più difficile sarà finire il gioco, usare la tecnologia che conosci bene e ottimizzare per il tuo tempo, non il codice. Spero che tu possa fare quello che non ho potuto - finire il maledetto gioco :)

Modifica

Per quanto riguarda il motivo per cui dovrei usare C # se dovessi farlo su:

IronPython ha i suoi vantaggi e svantaggi. È stato fantastico poter condividere file di codice (costanti, modelli, ecc.) Tra server e client. Apportare una modifica e aggiornare il browser per vederlo è stato fantastico. Il debug non è stato facile come C #.

Ma per certi versi è un cittadino di seconda classe di C #, l'associazione dei dati non ha funzionato e non è possibile utilizzare le classi IronPython in xaml. Il tempo di caricamento è stato un problema, quindi in realtà ho impiegato moltissimo sforzo per impostare l'importazione in parallelo su thread in background per accelerarlo. A causa del secondo status di cittadino per quanto riguarda xaml, ho usato un linguaggio modello per generare xaml come se fosse html, che in realtà ha funzionato meglio dell'associazione di dati, ma nessun linguaggio di modello python ha funzionato in IronPython, quindi ho scritto il mio ( un'altra perdita di tempo.)

Per abilitare i modelli di condivisione ho dovuto scrivere il mio ORM. È stato abbastanza facile. Ma per trasferirli ho passato JSON e ho creato un formato binario ottimizzato che ha funzionato tra IronPython e Python. Quella era un'altra caduta di tempo.

Col ??senno di poi non avrei dovuto distrarmi da tutte quelle scia di coniglio.

Twisted è stato usato per questo scopo con successo. Essere basati su chiamate asincrone è molto efficiente per le applicazioni che richiedono connessioni persistenti. Inoltre ha una bella implementazione RTMP da usare con il flash. Controlla chesspark, è costruito con Twisted:

http://www.chesspark.com/

Inoltre il motore di gioco non deve essere in c / c ++. Dipende dalla complessità e dal tipo di gioco. Ma c'è anche la libreria di pygame che è abbastanza buona.

Personalmente ti scoraggerei dall'usare Silverlight. Il plug-in flash è adottato molto meglio e continuerà ad essere nel prossimo futuro, specialmente su sistemi operativi non ms. Non prenderlo a cuore, ma non installerei Silverlight solo per vedere il tuo gioco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top