Javascript e PHP per il multiplayer in tempo reale? [chiuso]


13

Mi chiedo se combinare il client Javascript con il server PHP / mysql lato server sia una buona idea per i giochi multiplayer in tempo reale HTML5 (su piccola scala)?

Le mie conoscenze tecniche sono molto limitate e, anche se ho in programma di imparare node.js in futuro, la curva di apprendimento è piuttosto enorme in questo momento.

Dato che ho già familiarità con PHP, penso che lo farei funzionare molto più velocemente.

La scala che sto pensando è di 2-8 giocatori al momento. E cercando di mantenere il numero di messaggi client-server il più basso possibile.

I valori che intendo archiviare / gestire sono:

  • Nome e ID giocatore.
  • Posizione X e Y.
  • Salute.
  • Articoli attrezzati (massimo 8 slot, probabilmente meno).
  • Azioni (camminare, attaccare, usare ecc ma solo 1 azione / giocatore alla volta).
  • Proiettile X, coordinate Y e traiettoria.
  • Nome della gilda / clan.
  • E alcune funzioni di chat / mailing di base.

La mia ipotesi è anche se non è la soluzione migliore, ma pur mantenendo la logica ridotta, questo è completamente fattibile. Ho ragione?


4
Sembra perfettamente fattibile. Perché non lo provi? Peggio ancora, passi un po 'di tempo ad imparare, nel migliore dei casi, ottieni esattamente quello che vuoi.
William Mariager,

1
Sì, ma immagino che questo richiederebbe del tempo per creare, e non mi piace perdere tempo, ecco perché l'ho chiesto qui. =)
justanotherhobbyist

8
Se impari qualcosa, il tempo non è stato perso. ;) Qualcosa che vale la pena considerare è che, se cambi lingua, passerai del tempo ad imparare la nuova lingua e ad apprendere la rete allo stesso tempo, il che significa molto più debug per scoprire dove hai sbagliato. Se ti attieni a ciò che sai, imparerai prima il networking e quindi puoi portarlo se risulta inefficiente e la prossima volta che qualcuno farà una domanda simile, saprai la risposta giusta perché l'hai testata.
William Mariager,

1
Questo è in realtà un buon punto
justanotherhobbyist

Risposte:


12

Per un gioco in tempo reale, vuoi ridurre al minimo la latenza. Ecco due suggerimenti per raggiungerlo, con note su PHP e Nodo:

  1. Usa WebSocket. Consentono una rapida comunicazione bidirezionale tra il server e il client. L'uso di node.js qui ha il vantaggio di poter usare la stessa API JavaScript su entrambe le estremità della pipe. C'è anche il meraviglioso modulo socket.io per node.js che fornisce tecnologie di fallback a browser minori che non supportano WebSocket. Cercando su Google un po ', sembra che tu possa anche usare WebSocket da PHP se vuoi davvero.
  2. Non coinvolgere il database in dati critici nel tempo come le coordinate di oggetti in rapido movimento. Ciò significa mantenerli in memoria, che non è particolarmente adatto al tradizionale modello di utilizzo di PHP che prevede di attivarlo una volta per ogni richiesta di apache (o qualunque server Web), ma è possibile avviare la propria app del server PHP anche come standalone. Immagino che Node, con il suo core V8, sarà comunque più veloce di PHP . Se questo è un problema dipende da quanto sia esigente il tuo gioco e dalla potenza del server.

Personalmente trovo node.js molto facile da imparare e dato che dovrai comunque codificare un bel po 'di JavaScript, ti consiglio di provarlo. Almeno dai un'occhiata ai tutorial di socket.io per vedere quanto sia banale impostare un canale di comunicazione in tempo reale.


+1 per il punto 2. L'errore più grande che puoi fare con questo è aspettarti che le query MySQL si attivino su ogni evento. Tutto ciò che puoi fare per spostare i dati di gioco dall'HDD ti aiuterà. Ho avuto successo con l'abuso di Memcached per questo. Ci sono indubbiamente altri modi.
DampeS8N,

Sì, voglio davvero imparare il nodo, ma devo ancora farlo partire anche da cmd, l'errore più grande che gli sviluppatori hanno fatto è stato quello di renderlo così difficile da affrontare. Atleast ora la versione di Windows viene fornita con un programma di installazione, potrei provarlo se trovo un buon tutorial.
justanotherhobbyist

Il nodo non è affatto difficile da avviare o utilizzare. Più difficile di PHP è, sì, ma PHP paga un prezzo terribile per la sua comodità: il design che lo consente di essere incorporato in Apache e di default ovunque senza configurazione causa anche molti problemi che rendono PHP la scelta assolutamente e assolutamente peggiore può creare un back-end di gioco in tempo reale. Node, Python, Ruby, Java, ecc. Richiedono tutti la configurazione del server delle app, ma proprio quel modello consente l'elaborazione in-memory basata su eventi altamente scalabile che è letteralmente impossibile da ottenere in PHP.
Sean Middleditch,

1

Insieme alla risposta di Tapio vorrei suggerire di inviare solo (se possibile) input dell'utente (clic e input da tastiera) al server e far sì che sia il server che il client emulino il gioco. Ogni N spunta il client chiederebbe una sincronizzazione al server e il server risponderà con tutte le informazioni di cui il client ha bisogno per rendere il gioco come integrità, elementi, ecc. Questo per assicurarsi che il client non si disincronizzi troppo tanto.

Naturalmente sia il server che il client dovranno avere la stessa identica implementazione del gioco, quindi questo potrebbe richiedere un po 'più di lavoro. Se hai implementazioni perfette sia sul client che sul server, il client dovrà sincronizzarsi meno spesso.

Ciò ridurrà la messaggistica client / server e ridurrà la latenza. Ciò contribuirebbe anche a prevenire gli imbrogli.

Supponendo che tu stia creando questo gioco in JavaScript, potrebbe essere utile scrivere anche il back-end in JavaScript, usando NodeJS. In questo modo potresti riutilizzare l'implementazione JavaScript del tuo gioco sia per il server che per il client.


0

Consiglio di imparare Nodejs. Se già ora Javascript, non sarà così difficile. Ho realizzato rapidamente un gioco TRON multiplayer con Nodejs ed è stato il mio primo giorno ad usarlo. (Oh, e il client era un canvas HTML5; stavo solo inviando input chiave, come menzionato negli altri commenti.)

Dai un'occhiata a un modulo chiamato nowjs. In bocca al lupo!

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.