2011-04-15 12 views
6

Me di cuenta de que me estoy cansando de intentando hacer juegos con lenguajes de programación de alto nivel como C#, usando OpenTK. C o C++ stills parece un poco fuera de alcance para mi humilde yo. Acabo de tener el impulso repentino de volver a algún desarrollo web e intentar crear un juego de navegador, ¡en puro HTML5 + JS, por supuesto!HTML5 + Javascript: creación de redes para un juego

Y si bien creo que tarde o temprano puedo descubrir el lienzo, con la ayuda de ze internetz, simplemente no sé cómo debo manejar las redes.

WebSockets parecen interesantes, pero ¿son ellos el camino correcto, ya que todavía están bastante poco desarrollados? AJAX suena un poco lento y voluminoso. No planeo hacer un juego que requiera latencia muy baja, pero sí quiero mantenerlo lo suficientemente bajo para poder jugar sin problemas.

¿Qué sugeriría?

Respuesta

1

Sugeriría Ajax. La clave para la creación de redes en juegos en línea con HTML5 y JavaScript es minimizar el tráfico al servidor (como con cualquier otra aplicación web) por lo que todo lo que tiene que hacer es encontrar la manera de hacerlo. ¿Qué tipo de juego tienes en mente, exactamente? ¿Necesita estrictamente una conexión a internet constante?

Aún así, Ajax no es ni lento ni voluminoso. Es tan rápido como cualquier otra conexión a Internet en cualquier juego de escritorio.

+0

He hecho algo con Ajax antes - sin ninguna biblioteca. Creo que el mayor problema es que tengo que poner en cola los eventos que se enviarán al cliente una vez que los solicite, adjuntando sus acciones a esa solicitud. No ** se siente ** bien. – copyboy

+0

Ajax IS es más lento que otras conexiones, ya que cuando hace una solicitud de Ajax, todos los gastos generales de HTTP vienen con ella, incluso si la cantidad de datos que envía es mínima. Esto es cierto para cuando envía datos desde el cliente al servidor. Lo único que tiene Ajax tan rápido como cualquier otra cosa es la transmisión Ajax (del servidor al cliente). – HoLyVieR

+0

Puede ser más lento pero no lento. – Ryan

2

Quizás puedas obtener más información sobre options. Google le proporcionará material de investigación.

Dependiendo de la cantidad de datos intercambiados entre el servidor/los clientes, socket.io parece lo suficientemente bueno para hasta 10 actualizaciones/segundo para hasta 100 personas. Pero tenga en cuenta que incluso Javascript introducirá una gran cantidad de sobrecarga, las personas que crean código de red en C++ todavía se quejan de problemas de conectividad y velocidad incluso cuando usan un enfoque altamente específico (empaquetado de datos, caché de paquetes tcp/ip, etc.).

2

Si quiere quedarse sólo con HTML5, WebSocket es una tecnología muy interesante, especialmente si está usando los datos de avanzar lo más rápido posible . Es la única tecnología que le permitirá transmitir datos en ambas direcciones con el servidor. Si su juego no necesita tener una actualización tan pronto como estén disponibles, Ajax es suficiente.

También debe preguntarse qué navegador desea para su juego. WebSocket no es compatible con todos los navegadores.

Si está abierto a otras opciones, es posible hacer una conexión P2P en el navegador con RTMFP in Flash. Esto le permite hacer toda la comunicación de "cliente a cliente" directamente en lugar de pasar por un servidor para retransmitir los datos. Está en Flash, pero it's possible to bridge that functionnality para que tenga toda su lógica de aplicación en Javascript. Esta tecnología permite pasar más datos sin sobrecargar su servidor, pero la gran desventaja es el soporte. Flash no está bien soportado en la plataforma Unix y es un complemento de terceros.

+0

Heh, para ser honesto, no sé muy bien por qué tu respuesta fue votada en lugar de una de las otras. Dije explícitamente que quería una solución pura y que, de lo contrario, no contenía mucha información que yo no conocía. Sin ofender, no es una mala respuesta, solo creo que las otras respuestas fueron más útiles. – copyboy

+0

@copyboy Bueno, si crees que el otro es más útil para ti, puedes aceptar uno de ellos. Para eso es aceptar una respuesta. – HoLyVieR

+0

@copyboy si cree que las otras respuestas son más útiles, entonces cuando Jobs dice "Lo está haciendo mal". Cuanto antes te familiarices con NodeJS y Socket.io, mejor. – PaulM

3

Si la latencia no es un gran problema, probablemente solo deba usar una de las muchas buenas bibliotecas AJAX/de larga duración.

WebSockets obtendrá la comunicación del navegador de latencia más baja. WebSockets en realidad está bastante disponible universalmente porque su es un emulador de WebSockets Flash web-socket-js que se puede cargar automáticamente si no se encuentra soporte nativo de WebSocket. El uso de la emulación web-socket-js tendrá una mayor latencia que los WebSockets nativos, pero aún menor que AJAX/long-poll.

En términos de disponibilidad de WebSockets, WebSockets nativos (versión 03) es compatible con Chrome y Safari. La versión 03 también es compatible con Firefox 4.0 y Opera 11, pero está deshabilitada de manera predeterminada. WebSockets también es compatible en iOS de forma nativa desde 4.2. Estoy en el grupo de trabajo HyBi (WebSockets) y la próxima iteración del protocolo que aborda las preocupaciones de seguridad de Mozilla y Opera se está acercando mucho. Mozilla y Opera están trabajando activamente en las implementaciones, por lo que espero que, a más tardar, las próximas versiones principales de las mismas tengan habilitados WebSockets de manera predeterminada. Pero aun así, con el respaldo de Flash y el soporte de iOS, WebSockets está disponible en casi todas partes hoy en día.

Si está dispuesto a hacer Javascript también del lado del servidor, entonces recomendaría Socket.IO. Es un backend node.js más una biblioteca JS del lado del cliente. Por defecto, es WebSockets si el navegador lo admite, incluye la recuperación de Flash de web-socket-js, y puede usar el sondeo largo si la conexión WebSockets no funciona por alguna razón (o elige deshabilitar WebSockets como transporte).

+1

Ir a nodejs y socket.io es el camino a seguir. – PaulM

1

para el código de red, es posible que desee intentar trabajar con un marco existente como la plataforma de unión. he aquí una aplicación de dibujo multiusuario escrito en js/html5 puros sin websockets:

http://www.unionplatform.com/?page_id=2762

también vale la pena mirar www.socket.io. socket.io proporciona un contenedor de websocket sin formato con failover xhr, pero no apis de nivel superior (p. ej., sin salas, sin usuarios, sin cuentas, sin compartir/administrar datos para cosas como puntajes, etc.).

colin

Cuestiones relacionadas