JavaScript WebSockets mit UDP?

80

Ich schreibe eine JavaScript-Anwendung, die eine große Datenmenge von anderen Benutzern erhalten muss. Es ist nicht wichtig, ob einige dieser Daten verloren gehen. Gibt es eine Möglichkeit, JavaScript WebSockets mit UDP anstelle von TCP zu verwenden?


quelle
1
Dies kann über webRTC erfolgen. Der Spieleserver geckosio.github.io verwendet diese Technik.
Fost

Antworten:

52

Nein, es ist keine UDP-Kommunikation innerhalb von JavaScript möglich. Es tut uns leid.

Pablo Santa Cruz
quelle
2
@TimeMachine Sie werden keine WebSockets erstellen, die auf TCP basieren. Der erste Handshake wird auch so ausgeführt, dass er von Webservern als HTTP-Upgrade-Anforderung erkannt wird. Weitere Informationen
Ivo Wetzel
3
@IvoWetzel Warum heißt das, dass sie es nicht tun? Ich kann mir verschiedene Möglichkeiten vorstellen, um UDP-Websockets sicher zu implementieren.
Timmmm
32
Die Antwort ist nicht mehr aktuell: WebRTC webrtc.org bietet (experimentelles) UDP im Browser an und nodejs können auf udp-Sockets auf dem Server zugreifen.
Mirko
Hier ist eine [Diskussion dieses Themas] [1] in Bezug auf Spiele. Dort behandelt er Websockets, Webrtc (eine mögliche Wahl für UDP, aber kompliziert), Quic (nur in Google Chrome) und sein [netcode.io] [2]. [1]: gafferongames.com/post/… [2]: github.com/RedpointGames/netcode.io-browser
Diagon
UDP / Datagram Sockets- Verbindung mit node.js! Das dgram-Modul bietet eine Implementierung von UDP-Datagramm-Sockets.
Derk Jan Speelman
55

Es hört sich so an, als würden Sie auf WebRTC warten, das den Standardprozess durchläuft. Wie andere bereits erwähnt haben, wird WebSockets aufgrund der Initiierung mit einem HTTP-Upgrade über TCP ausgeführt.

Tschad
quelle
4
WebRTC sieht fast großartig aus, aber soweit ich das beurteilen kann, müssen Sie RTCDataChannel für die Datenkommunikation verwenden, und das verwendet SCTP, das keine unzuverlässigen Lieferungen unterstützt (für Spiele erforderlich). Bearbeiten: Abbrechen, dies unterstützt einen unzuverlässigen Modus. Guter Artikel hier
Timmmm
Nicht nur das, es ist auch Peer 2 Peer, nicht großartig für einen autoritären Server.
NiCk Newman
11
Es gibt keinen Grund, warum einer der "Peers" nicht Ihr Server sein kann.
Tschad
6

Klingt so, als wäre die Frage für clientseitiges UDP gedacht, aber seit ich hier gelandet bin ...

Sie können UDP in JavaScript auf dem Server mit dem Paket node.js ausführen .dgram

Nick Benes
quelle
4

Das WebSockets-Protokoll ist nur über TCP, wie derzeit definiert.

Sie können UDP mit Flash ausführen, wenn Sie bereit sind, einen RTMFP-Server (Real Time Messaging Flow Protocol) zu verwenden.

Kanaka
quelle
1

Wenn diese Frage noch aussteht: Ich habe ein Projekt namens JNEXT gefunden und es gibt ein Beispiel für die Verwendung von UDP. Das Projekt selbst scheint angehalten zu sein, aber zumindest in Firefox funktioniert es (es funktioniert nicht mit Chrome und Opera). Vielleicht lohnt es sich, danach zu suchen.

Klaus
quelle
3
Wenn ich möchte, dass der Benutzer Software installiert, könnte ich Flash noch besser verwenden.
Flash bietet Ihnen jedoch kein UDP.
Brian DiCasa
-4

Ich denke, Sie können die Silverliht 4-Technologie nutzen. Sie können eine Silverlight 4-Anwendung für die Kommunikation mit dem Server erstellen und diese dann in eine HTML-Seite einbinden. Dann kann Ihr JavaScript TCP-Verbindungen über die Silverlight 4-Anwendung herstellen!

John
quelle
Ich denke, dass dies für eine Web-App, die nur von Mac- und iPhone-Entwicklern verwendet werden soll, sehr schwierig ist. ^^ '
2
Außerdem unterstützt Silverlight kein "echtes" UDP, sondern nur Multicast-UDP, und das funktioniert nur im LAN.
Martin Ørding-Thomsen
2
Die Frage ist für UDP nicht TCP
markmnl
-9

Sie können einen WebSocket-Server schreiben, der als Proxy / Bridge zwischen TCP / UDP dient.

Tim R.
quelle
21
Das würde den gesamten Zweck von UDP zunichte machen.