2010-04-28 43 views
8

¿Es posible crear un juego en tiempo real con node.js que requiera reflejos de contracción? ¿Qué tan alta es la latencia? ¿Qué tan bajo puede ser realista?node.js juego en tiempo real

Respuesta

6

Los servidores HTTP suelen estar optimizados para el rendimiento/ancho de banda por sobre la latencia. node.js es poco probable que sea una excepción, y HTTP es intrínsecamente pobre para latencia baja de todos modos debido a la estructura del protocolo.

One informal benchmark usando node.js admite esto, mostrando latencias de cientos de milisegundos. En comparación, la mayoría de los juegos de twitch admiten latencias de no más de 30 o 40 ms, idealmente menos.

Por lo tanto, recomendaría descartar el aspecto de contracción si no puede eliminar HTTP.

+12

No veo qué tiene que ver HTTP con eso. Para actualizaciones de baja latencia entre jugadores en un juego multijugador, las personas usualmente usan UDP o TCP, y ambos pueden hacerlo node.js. – JasonWoof

+4

Tiene toda la razón. Sin embargo, cuando publiqué esta respuesta, pocas personas hablaban sobre el uso de node.js para nada excepto como servidor web y el soporte UDP aún estaba a 2 meses de distancia. – Kylotan

+4

Ahh :) Me sorprende lo rápido que se está desarrollando node.js. – JasonWoof

14

Es posible hacer un juego en tiempo real en node.js como lo haría con cualquier otro idioma/framework.

El problema aquí sería qué tipo de servidor y cliente usarías.
Usar la característica http server para tal juego sería una mala idea y muy difícil, pero podría usar el TCP server (ahora llamado servidor de red) como lo haría en cualquier otro idioma.

El cliente estaría en alguna plataforma en la que pueda usar sockets, como Flash, applets de Java o software de escritorio.

Tenga en cuenta que incluso con el uso de un servidor de socket TCP puede tener problemas de latencia para un juego de contracción, pero esto está fuera del área relacionada con esta pregunta y más acerca de games and networking.

PS: Usted podría tomas de uso en la web, ya que en teoría debe trabajar como sockets TCP, pero todavía no existe un buen soporte para ellos en los navegadores modernos actuales.


EDITAR:

Parece que no me he explicado correctamente, puede hacer un juego accesible navegador como usted ha dicho, sólo tiene que utilizar un protocolo que permite a envía datos rápidamente hacia adelante y hacia atrás en tiempo real.

Si quieres un juego navegador "puro" sin terceros plugins la única manera, como he dicho antes, está utilizando JavaScript con websockets que no está bien soportado todavía por los principales navegadores . (Se puede usar un puente de Flash y aún así tener su juego en JavaScript sin embargo.)

El uso de un tercero plug-in de Flash que tiene y Java (además de los numerosos plugins menos conocidos como la unidad y así sucesivamente). Ambos tienen sockets TCP (no estoy seguro acerca de UDP) y se pueden hacer para conectarse a un servidor de red node.js (con algunas limitaciones de seguridad). La mayoría de la gente diría que vayas con Flash ya que hay un soporte más grande pero a Apple no le gusta, así que no tienes Flash en iPhone/iPad/iPod Touch ni en otros dispositivos móviles misceláneos (que en cambio soportan Java).

Así que sí ... buena suerte con esto.

EDIT 2: apoyo WebSocket

en los navegadores es ahora bastante decente, así que recomiendo para juegos en tiempo real, si desea utilizar el navegador como cliente.

+8

usando TCP para un juego no es muy inteligente, UDP es el camino a seguir. –

+8

Estoy totalmente en desacuerdo. Usar UDP para un juego no es muy inteligente, TCP es el camino a seguir. – Ricket

+0

De cualquier manera, UDP es aún menos compatible con estas plataformas. (No recuerdo si Flash lo admite, creo que sí lo hacen las manzanas de Java). –

4

Es posible, pero depende de la cantidad de datos que se deben transmitir entre el servidor y el cliente y qué tan rápido (hablando de latencia). Eche un vistazo a Sousaball by Creationix, por ejemplo.

Además, si va a utilizar websockets, eche un vistazo a la biblioteca Socket.IO de learnboost. Utiliza websockets cuando está disponible y regresa al cometa en otros casos.

Cuestiones relacionadas