2010-03-04 19 views
11

Ho un anno di esperienza nella scrittura di codice client ma nessuna con roba server. Voglio limitare un po 'la domanda, quindi semplificherò ciò che sto cercando di ottenere.Programmazione server - Semplice gioco multiplayer: quale protocollo e tecnologie?

Voglio scrivere il codice del server in modo tale che due client (browser o iPhone/Android) possano connettersi, quando due giocatori hanno collegato vedono un conto alla rovescia fino a zero. L'orologio sarebbe sincronizzato sul server e i client sarebbero identificabili in modo univoco.

Il problema qui è con la parola connect, che cosa usano le persone per i giochi multiplayer? Aprire un socket TCP per le comunicazioni bidirezionali? Puoi dire che non sono sicuro di cosa sto parlando. Speravo di usare AppEngine ma non sono sicuro che sia adatto in quanto basato su richiesta.

Ho un po 'di esperienza con Java e anche se Erlang suona come la scelta migliore, questo è qualcosa con cui voglio giocare e spingere velocemente in modo che Java sia più facile. Ho solo bisogno di conoscere il modo migliore per collegare lettori ecc

Grazie,

Gav

risposta

7

Suggerisco che consideriamo sistemi mobili desktop e come uguali clienti. Quali opzioni sono allora?

  • Si scrive un server socket che accetterà le connessioni dai client. Ma poi devi scrivere anche qualche client socket, anche 2x - per un desktop e per un sistema operativo mobile. E l'utente dovrà installare questo client.

  • Si avvia un server Web (qualunque sia la tecnologia desiderata). Esporterà alcuni servizi Web che saranno ugualmente accessibili sia ai sistemi operativi desktop sia a quelli client. Ma hai ancora bisogno di scrivere un'applicazione client (sempre 2x).

  • Si esegue un server Web e tutte le funzionalità sono accessibili tramite protocollo HTTP standard. In questo modo non avrai nemmeno bisogno di un client: quasi ogni desktop o sistema operativo mobile ha almeno un browser web installato. JavaScript fornirà aggiornamenti dinamici del tuo ticker.

+0

Grazie per una buona risposta a una domanda vaga - La programmazione di socket è la più applicabile a ciò che voglio raggiungere risulta, la tua risposta mi ha dato le parole chiave per fare più ricerca. – gav

+0

Javascript in questo caso potrebbe e dovrebbe essere considerato come un client come gli altri. –

1

sono affatto un esperto di comunicazione di rete, ma se non ti dispiace perdere un paio di pacchetti (o il controllo degli errori nel software) e si desidera veloce, comunicazione magra è possibile utilizzare UDP. Penso che la maggior parte dei programmi di dati time-sensitive e streaming multimediale utilizzano questo protocollo per evitare ritardi e mantenere le dimensioni del pacchetto verso il basso.

1

Ho realizzato un'applicazione client/server alcuni anni fa con java e ServerSocket (http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html). Hai anche una versione SSL.

Quindi si crea un ServerSocket e si attende la connessione. Quando un client è connesso, crei una discussione che discuterà con questo client con un protocollo che hai creato.

http://www.developer.com/java/ent/article.php/1356891/A-PatternFramework-for-ClientServer-Programming-in-Java.htm

Se trovato questo piccolo quadro:

http://www.bablokb.de/jcs/jcs.html

Uno dei la cosa più difficile è quello di creare il vostro protocollo, un buon modo per imparare a creare uno sarebbe di capire come funzionano l'FTP (o HTTP ...).

1

Si ha ragione che il modello J2EE si guasta con richieste quasi in tempo reale o multi giocatore. È possibile prendere in considerazione il progetto del server di gioco RedDwarf. Funziona per i giochi ciò che Servlets fa per logica busiens ed è open source.

http://www.reddwarfserver.org

suggerisco che consideriamo desktop e mobili come sistemi uguali clienti. Quali sono le opzioni ?

RedDwarf ha uno strato di trabsport collegabile e può supportare qualsiasi tipo di client che si desidera.

I server Web sono ottimi per le app di tipo Web. se il tuo gioco si comporta come una pagina web - non è multiutente, è basato su turni e si evolve molto lentamente - quindi un server web è un buon gioco.

Se non è così, è necessario qualcosa di più forte nella tecnologia.

Oh, e per quello che vale, se lo si fa, se si desidera scrivere un server da zero, allora NON utilizzare "ServerSocket". Ciò richiede una discussione per connessione e non potrà mai scalare. Usa NIO o usa un framewoprk NIO come Netty.

+0

Link è morto, ecco il link github: https://github.com/reddwarf-nextgen/reddwarf –

Problemi correlati