¿Cómo manejar el modo multijugador en JavaScript?

12

Solo estoy investigando un poco sobre tecnología para usar en un juego móvil de jugadores múltiples.

Es más un experimento en este momento, por lo que, por el momento, lo único que los jugadores deben tener en cuenta son los otros jugadores.

Si se tratara de una aplicación web típica y no un juego, solo tendría solicitudes HTTP activadas todo el tiempo, pero como se trata de un juego, el rendimiento y la precisión serán un problema.

Debido a que el juego está dirigido a múltiples plataformas telefónicas, digamos que el cliente se escribirá en JavaScript o en un marco basado en JavaScript. La tecnología del servidor es totalmente abierta.

Cada jugador necesitará hacer el equivalente de una publicación HTTP y solo usar un protocolo más rápido. La razón por la que el modo multijugador se basa en la web es porque el modo multijugador a través de Bluetooth u otra red local sería demasiado diverso en todas las plataformas y podría causar problemas.

Entonces, la pregunta se reduce a cuál es un buen protocolo / tecnología para usar en el modo multijugador de JavaScript. ¿Algún consejo sobre el lado del servidor o es importante? ¿Alguna razón por la que debería abandonar esta arquitectura de dos niveles e ir con una conexión directa de teléfono a teléfono?

ARMÓNICO
fuente

Respuestas:

15

Desea un mejor protocolo de comunicación que HTTP. Probablemente quieras UDP o TCP. Los navegadores no tienen forma de hacer comunicación UDP, por lo que su única opción es TCP.

Para TCP, querrá usar un WebSocket , sin embargo , el soporte del navegador es inestable en los Websockets.

Esto significa que necesitaría usar una técnica COMET para emular TCP, una emulación popular sería un websocket integrado en una aplicación flash.

Socket.IO es una biblioteca (para node.js ) que admite websockets y los emula con un respaldo apropiado en navegadores web no compatibles (utiliza flash y otras técnicas COMET).

Para juegos JavaScript de varios jugadores, recomendaría el uso de socket.io y node.js

Raynos
fuente
1
Aquí hay una muestra de un juego en tiempo real hecho con HTML5 y WebSockets: rawkets.com . El código fuente está disponible aquí: github.com/robhawkes/rawkets
Elisée
1
Aquí hay dos ejemplos más
Raynos
4

Tanto la pregunta como la respuesta aceptada se publicaron en 2011, y los tiempos han cambiado bastante desde :)

Websockets es bastante frecuente, pero una tecnología aún mejor es WebRTC que permite flujos UDP poco confiables. Estos son mucho, mucho mejores para los juegos.

Además de la comunicación, hay muchos otros obstáculos que superar al escribir juegos multijugador, como la reconciliación del estado del juego, la predicción del lado del cliente, la serialización y muchos otros.

<shameless self promotion>

Soy uno de los desarrolladores originales de lance.gg , un servidor / biblioteca de juegos multijugador basado en node.js donde hemos resuelto muchos de los problemas mencionados (¡y muchos otros!). Nuestro objetivo es facilitar el desarrollo de juegos multijugador para los desarrolladores de juegos JavasScript. Te invito calurosamente a usarlo como punto de partida para hacer tu juego.

</shameless self promotion>

OpherV
fuente
1

Mira esto:

  • WebSocket (canales de comunicaciones bidireccionales, full-duplex, a través de un único socket de Protocolo de Control de Transmisión (TCP)
  • node.js
  • ¿Qué es node.js?
sabiland
fuente