Comment gérer le multijoueur en JavaScript?

12

Je fais juste un peu de recherche sur la technologie à utiliser pour un jeu mobile multi-joueurs.

C'est plus une expérience à l'heure actuelle, donc pour le moment, la seule chose dont les joueurs doivent être conscients est les autres joueurs.

S'il s'agissait d'une application Web typique et non d'un jeu, il y aurait simplement des requêtes HTTP qui se déclenchent tout le temps - mais comme il s'agit d'un jeu, les performances et la précision vont être un problème.

En raison du ciblage du jeu sur plusieurs plateformes téléphoniques, disons que le client sera écrit en JavaScript ou dans un framework basé sur JavaScript. La technologie serveur est totalement ouverte.

Chaque joueur devra créer l'équivalent d'une publication HTTP et n'utiliser qu'un protocole plus rapide. La raison pour laquelle le multijoueur est basé sur le Web est que le multijoueur via Bluetooth ou un autre réseau local serait trop diversifié sur les plates-formes et pourrait causer des problèmes.

Donc, la question se résume à quel est le bon protocole / technologie à utiliser pour le multijoueur JavaScript? Des conseils sur le côté serveur ou est-ce important? Pour quelle raison devrais-je abandonner cette architecture à deux niveaux et utiliser une connexion directe de téléphone à téléphone?

HARMONIQUE
la source

Réponses:

15

Vous voulez un meilleur protocole de communication que HTTP. Vous voulez probablement UDP ou TCP. Les navigateurs n'ont aucun moyen de faire la communication UDP, donc votre seul choix est TCP.

Pour TCP, vous voudriez utiliser un WebSocket , cependant la prise en charge du navigateur est instable sur les websockets.

Cela signifie que vous devrez utiliser une technique COMET pour émuler TCP, une émulation populaire serait une prise Web intégrée à une application flash.

Socket.IO est une bibliothèque (pour node.js ) qui prend en charge les websockets et les émule avec une solution de repli appropriée sur les navigateurs Web non conformes (elle utilise le flash et d'autres techniques COMET).

Pour les jeux JavaScript multijoueurs, je recommanderais l'utilisation de socket.io et node.js

Raynos
la source
1
Voici un exemple de jeu en temps réel réalisé avec HTML5 et WebSockets: rawkets.com . Le code source est disponible ici: github.com/robhawkes/rawkets
Elisée
1
Voici deux autres exemples
Raynos
4

La question et la réponse acceptée ont été publiées en 2011, et les temps ont bien changé depuis :)

Websockets est assez répandu, mais une technologie encore meilleure est WebRTC qui permet des flux UDP peu fiables. Ce sont beaucoup, beaucoup mieux pour les jeux.

Outre la communication, il existe de nombreux autres obstacles à surmonter lors de l'écriture de jeux multijoueurs tels que la réconciliation de l'état du jeu, la prédiction côté client, la sérialisation et bien d'autres.

<shameless self promotion>

Je suis l'un des développeurs originaux de lance.gg , un serveur / bibliothèque de jeux multijoueurs basé sur node.js où nous avons résolu bon nombre des problèmes mentionnés (et bien d'autres!). Notre objectif est de faciliter le développement de jeux multijoueurs pour les développeurs de jeux JavasScript. Je vous invite chaleureusement à l'utiliser comme point de départ pour créer votre jeu.

</shameless self promotion>

OpherV
la source