2012-10-12 49 views
7

Imagine que quiero crear un juego multijugador en tiempo real, con HTML5 (cliente) y node.js (servidor).WebRTC el correcto? (juego multijugador en tiempo real)

Necesito transportar datos muy rápido del servidor a los clientes y viceversa.

En una aplicación nativa usaría UDP para la mayoría de los datos (posición del jugador, ...), porque es mucho más rápido que TCP y no es crítico cuando se pierde.

En HTML5 puedo (solo) usar WebSockets. WebSockets se encuentra en la parte superior de TCP y por lo tanto no lo suficientemente rápido para un buen rendimiento.

Oí acerca de WebRTC, pero no sé si esta podría ser la solución para este problema.

¿Alguien tiene experiencia con él?

(lo sé, que todavía está sin apoyo WebRTC para la mayoría de los navegadores, pero eso no me importa.)

+0

¿Estás seguro de que los websockets son demasiado lentos para tu caso de uso? Un socket tcp se mantiene abierto durante la sesión de websocket para que no tenga que preocuparse por la sobrecarga de conexión para cada mensaje. – simonc

+0

TCP: Entrega confiable de mensajes; se confirman todos los datos Se gestiona la entrega de todos los datos, y los datos perdidos se retransmiten automáticamente. UDP: Entrega no confiable y de mejor esfuerzo sin acuses de recibo Así que TCP es simplemente la técnica incorrecta para este caso de uso. – appsthatmatter

+1

Intenta implementarlo usando WebSockets y mide si realmente es demasiado lento (no hace falta decir que abstrae su implementación de transporte para que si WebSockets resulta ser insatisfactorio, puede usar otra cosa sin descartar muchos códigos). En este momento estás optimizando prematuramente. – ebohlman

Respuesta

2

En términos de WebRTC, suena como lo que necesita es DataChannel: ver draft protocol y HTML5 Rocks article (descargo de responsabilidad: ¡lo escribí!)

DataChannel es un trabajo en progreso, aún no implementado por ningún navegador.

En cuanto a otros componentes WebRTC, MediaStream (getUserMedia) es compatible con Chrome, Firefox Nightlies y Opera; RTCPeerConnection está en Chrome estable, detrás de un indicador (sin indicador en las próximas versiones), y prometido para Firefox 18 en el primer trimestre de 2013.

EDITAR: RTCDataChannel ahora se ha implementado en Firefox y Chrome.

Demostración de 'página individual' de Chrome: simpl.info/dc, Firefox demo.

+0

Con respecto a los últimos anuncios realizados, veo que MediaStream y PeerConnection avanzan rápidamente. ¿Cómo va DataChannel? También su artículo menciona DataChannel para la comunicación de navegador a navegador. Funciona también con navegador a servidor, ¿verdad? – Cystack

+1

Gracias por señalar esto, no he mirado esto por un tiempo: EDIT añadido. En un servidor, puede usar las API WebRTC C++. –

1

RTCDataChannel proporciona transporte basado en sesiones/confiable y sin conexión/no confiable, análogo a TCP y UDP en un cliente nativo, respectivamente. Más información here. A partir de 2013, esta es una tecnología viable, aunque solo en versiones posteriores de Chrome y Firefox.

According to html5rocks.com, ahora también es posible utilizar tipos binarios para la transferencia. Entonces debería tener todas las capacidades que tendría con un cliente UDP nativo eficiente. Sin embargo,, todavía no estoy seguro de si la transferencia binaria ha llegado desde el repositorio webrtc, where it has been fixed, hasta Chrome o si solo está disponible en Chrome Canary en este momento.

Cuestiones relacionadas