¿WebSockets de JavaScript con UDP?

80

Estoy escribiendo una aplicación JavaScript que tiene que recibir una gran cantidad de datos de otros usuarios. No es importante si se pierden algunos de estos datos. ¿Hay alguna forma de usar JavaScript WebSockets con UDP en lugar de TCP?


fuente
1
Se puede hacer a través de webRTC. El servidor de juegos geckosio.github.io utiliza esta técnica.
Fost

Respuestas:

52

No, no es posible tener comunicación UDP dentro de JavaScript. Lo siento.

Pablo Santa Cruz
fuente
2
@TimeMachine No tendrán WebSockets construidos sobre TCP, el protocolo de enlace inicial también se realiza para que los servidores web lo reconozcan como una solicitud de actualización HTTP. Puede leer más sobre el protocolo en el último borrador: tools.ietf.org/html/draft-abarth-thewebsocketprotocol-00
Ivo Wetzel
3
@IvoWetzel ¿Por qué eso significa que no lo harán? Puedo pensar en varias formas de implementar UDP Websockets de forma segura.
Timmmm
35
La respuesta ya no está actualizada: WebRTC webrtc.org ofrece UDP (experimental) en el navegador y nodejs puede acceder a los sockets udp en el servidor.
Mirko
Aquí hay una [discusión de este tema] [1] en relación con los juegos. Allí cubre websockets, webrtc (una opción posible para UDP, pero complicada), quic (solo en google chrome) y su [netcode.io] [2]. [1]: gafferongames.com/post/… [2]: github.com/RedpointGames/netcode.io-browser
Diagon
Conexión UDP / Datagram Sockets con node.js! El módulo dgram proporciona una implementación de sockets de datagramas UDP.
Derk Jan Speelman
57

Parece que lo que está esperando es WebRTC, que está funcionando a través del proceso de estándares. WebSockets, como han señalado otras personas, se ejecuta sobre TCP como resultado de iniciarse con una actualización HTTP.

Chad
fuente
4
WebRTC se ve casi genial, pero por lo que puedo decir, tienes que usar RTCDataChannel para la comunicación de datos, y eso usa SCTP que no admite entregas no confiables (necesario para juegos). Editar: Cancele eso, admite un modo no confiable. Buen artículo aquí
Timmmm
No solo eso, sino que es Peer 2 Peer, no ideal para un servidor autoritario.
NiCk Newman
11
No hay razón para que uno de los "pares" no pueda ser su servidor.
Chad
6

Parece que la pregunta está destinada a UDP del lado del cliente, pero como terminé aquí ...

Usted puede hacer UDP en JavaScript en el servidor mediante el Node.js dgrampaquete .

Nick Benes
fuente
4

El protocolo WebSockets es sobre TCP solo como se define actualmente.

Puede utilizar UDP con Flash si está dispuesto a utilizar un servidor RTMFP (Protocolo de flujo de mensajes en tiempo real).

canaca
fuente
1

Si esta pregunta aún está pendiente: encontré un proyecto llamado JNEXT y hay un ejemplo que usa UDP. El proyecto en sí parece estar en pausa, pero al menos en Firefox funciona (no funciona con Chrome y Opera). Quizás valga la pena buscarlo.

Klaus
fuente
3
Si quisiera que el usuario instale software, podría usar Flash aún mejor.
Sin embargo, Flash no te da UDP.
Brian DiCasa
-4

Creo que puede aprovechar la tecnología Silverliht 4. Puede crear una aplicación Silverlight 4 para comunicarse con el servidor y luego agregarla a la página html. ¡Entonces su JavaScript puede construir conexiones TCP a través de la aplicación Silverlight 4!

John
fuente
Creo que eso es muy difícil para una aplicación web que solo deben usar los desarrolladores de Mac y iPhone. ^^ '
2
Además, Silverlight no admite UDP "real", solo UDP de multidifusión y eso solo funciona en LAN.
Martin Ørding-Thomsen
2
La pregunta es para UDP, no TCP
markmnl
-9

Puede escribir un servidor WebSocket para que sirva como proxy / puente entre TCP / UDP.

Tim R.
fuente
21
Eso frustraría todo el propósito de UDP.