Come gestire il multiplayer in JavaScript?


12

Sto solo facendo un po 'di ricerca sulla tecnologia da utilizzare per un gioco multiplayer mobile.

Al momento è più un esperimento, quindi per il momento, l'unica cosa di cui i giocatori devono essere consapevoli sono gli altri giocatori.

Se si trattasse di una tipica applicazione Web e non di un gioco, le richieste HTTP verranno sempre attivate, ma poiché si tratta di un gioco, le prestazioni e l'accuratezza saranno un problema.

A causa del fatto che il gioco è destinato a più piattaforme telefoniche, supponiamo che il client sarà scritto in JavaScript o in un framework basato su JavaScript. La tecnologia del server è totalmente aperta.

Ogni giocatore dovrà fare l'equivalente di un post HTTP e ottenere solo usando un protocollo più veloce. Il motivo per cui il multiplayer è basato sul web è perché il multiplayer tramite Bluetooth o altre reti locali sarebbe troppo diversificato su tutte le piattaforme e potrebbe causare problemi.

Quindi la domanda si riduce a qual è un buon protocollo / tecnologia da utilizzare per il multiplayer JavaScript? Qualche consiglio sul lato server o è importante? Qual è il motivo per cui dovrei abbandonare questa architettura a due livelli e scegliere una connessione diretta da telefono a telefono?

Risposte:


15

Volete un protocollo di comunicazione migliore di HTTP. Probabilmente vuoi UDP o TCP. I browser non hanno modo di comunicare UDP, quindi l'unica scelta è TCP.

Per TCP si desidera utilizzare un WebSocket , tuttavia il supporto del browser è instabile su WebSocket.

Questo significa che dovresti usare una tecnica COMET per emulare TCP, un'emulazione popolare sarebbe un websocket incorporato in un'applicazione flash.

Socket.IO è una libreria (per node.js ) che supporta i websocket e li emula con un fallback adeguato su browser Web non conformi (utilizza flash e altre tecniche COMET).

Per i giochi JavaScript multiplayer consiglierei l'uso di socket.io e node.js


1
Ecco un esempio di un gioco in tempo reale realizzato con HTML5 e WebSocket: rawkets.com . Il codice sorgente è disponibile qui: github.com/robhawkes/rawkets
Elisée

1
Qui ci sono due altri esempi
Raynos

4

Sia la domanda che la risposta accettata sono state pubblicate nel 2011, e i tempi sono cambiati da allora :)

I websocket sono abbastanza diffusi, ma una tecnologia ancora migliore è WebRTC che consente flussi UDP inaffidabili. Questi sono molto, molto meglio per i giochi.

Oltre alla comunicazione, ci sono molti altri ostacoli da superare quando si scrivono giochi multiplayer come la riconciliazione dello stato dei giochi, la previsione sul lato client, la serializzazione e molti altri.

<shameless self promotion>

Sono uno degli sviluppatori originali di lance.gg , un server / libreria multiplayer basato su node.js in cui abbiamo risolto molti dei problemi citati (e molti altri!). Il nostro obiettivo è semplificare lo sviluppo di giochi multiplayer per gli sviluppatori di giochi JavasScript. Ti invito caldamente a usarlo come punto di partenza per creare il tuo gioco.

</shameless self promotion>


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.