Server di gioco per un gioco da tavolo a turni Android / iOS


9

Attualmente sto programmando un gioco per iPhone e vorrei creare una modalità multiplayer online. In futuro, questa app sarà trasferita su dispositivi Android, quindi mi chiedevo come creare il server di gioco?

Prima di tutto, quale lingua dovrei scegliere? Come rendere un server in grado di comunicare sia con programmi scritti in Object-C che Java?

Quindi, come farlo efficacemente? Va bene se apro un socket dal client (ce ne saranno 2)? Che tipo di informazioni dovrei inviare al server? ai clienti?

Risposte:


7

Non intendo iniziare qui una guerra santa, ma la maggior parte dei servizi Internet (flickr, twitter, facebook e simili) hanno lanciato SOAP a favore dei servizi web RESTful e JSON come formato serializzato. Sebbene essenzialmente lo stesso, i servizi REST si basano sul metodo url e http per definire cosa dovrebbe essere fatto, ad esempio

GET /articles - list all articles
POST /articles - add a new article
PUT /articles/123 - update article 123 with new data

JSON - descritto in json.org - è anche più semplice di XML e, sebbene forse irrilevante, ti farà risparmiare qualche byte per richiesta. Seguendo l'esempio precedente, ecco come sarebbe descritto un articolo nella notazione JSON:

{ 
 "id": 123,
 "author": "Cyril",
 "content": "Hello, this is an article",
 "tags": [ "gamedev", "webservices", "multiplayer" ] 
}

Per l'IOS c'è questo bell'articolo http://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/ che menziona http://code.google.com/p/json-framework / per l'analisi e la generazione dei dati.

Essendo a turni, puoi fare affidamento sulle sessioni http sul server per mantenere lo stato, quindi non è necessario mantenere una connessione socket persistente al server. Qualsiasi linguaggio lato server lo supporta (php, python, java, ecc.).

Questa architettura consente di scalare in orizzontale (aggiungendo più server) in modo trasparente.


4

Poiché il tuo gioco sarà a turni, gli aggiornamenti in tempo reale non sono molto importanti. Il modo più semplice per farlo è usare un server già costruito, andrei con un web server. Qualsiasi piattaforma su cui valga il porting del gioco dovrebbe facilitare l'accesso ai servizi Web situati su un server Web.

Per fornire aggiornamenti quasi in tempo reale, ti consiglio di esaminare il polling lungo. Il codice a quel link fornisce l'implementazione di base del polling lungo dal lato server. Ma la linea di fondo è che una volta effettuata una richiesta a una risorsa, il server esegue una chiamata di blocco fino a quando i dati richiesti non diventano disponibili. Quindi ripeti il ​​processo ancora e ancora.

In termini di dati da inviare, trattare sempre il cliente come ostile. Il client deve inviare qualunque sia il suo "stato di svolta", il server lo convalida, e quindi se tutto procede, invia il nuovo "stato di gioco" a tutti i client connessi.

-

I servizi web SOAP sono probabilmente il posto migliore da cui iniziare ( link ), sono facili da iniziare e la maggior parte dei framework web fornisce un metodo per esporli. Potresti anche voler esaminare i servizi RESTful, ma in genere lasciano un po 'di più il processo di serializzazione al consumatore.

Per consumare i servizi web SOAP su Android, guarderei qui .


Ciao e grazie per la tua risposta. Ma non capisco ancora come inviare i dati al mio servizio web? come serializzare l'input dell'utente (qui una mossa nella mia scheda 8 * 8, ad esempio: giocatore 1 da [0,0] a [1,1]) e quindi come serializzare lo stato del gioco?
Cirillo,

Controlla i due collegamenti che ho aggiunto. Dovrebbero iniziare con i servizi Web SOAP, che è probabilmente il modo più semplice per iniziare.
Nate,

Per Android e iOS non è necessario utilizzare il polling lungo. Le notifiche push di Apple o Google Cloud Messaging ti consentiranno di trasferire i dati dal server ai tuoi dispositivi.
Matt,

2

Penso che usare SOAP o anche HTTP sia eccessivo. Basta definire il proprio protocollo su connessioni TCP vanilla. Ad esempio, interpretare ogni riga di testo inviata come comando. Definire quali comandi / risposte possono inviare il client e il server.

FICS funziona in questo modo e ha servito migliaia di giocatori di scacchi per molti anni. Anche IRC funziona in questo modo (vedi RFC 1459).


L'HTTP offre numerosi vantaggi: può usare i proxy, non è quasi mai
protetto da
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.