2016-05-12 16 views
-1

Ich habe das folgende Szenario:Datenverlust mit UDP und Web-Sockets

Ein lokaler PC empfängt Datenproben über Bluetooth mit 50.000 Bit/s. Die Daten werden über UDP an einen Server gesendet. Der Server wiederum verteilt die Daten über Webseiten/JavaScript und Web-Sockets an verbundene Browser, in denen die Daten verarbeitet werden. Schließlich werden die Ergebnisse, die von den Browsern kommen, über UDP an den lokalen PC zurückgegeben.

Bis jetzt experimentiere ich mit einem streng lokalen Setup, d. H. Alles läuft auf einer Maschine, die eine CPU mit vier Kernen hat. Ich habe Servercode sowohl in node.js als auch in golang geschrieben. In beiden Fällen gibt es einen signifikanten Datenverlust, d. H. Nicht jedes Sample, das über UDP gesendet wird, wird erfolgreich von dem Server empfangen, selbst wenn nur ein Web-Socket-Client verbunden ist.

Wo ist der Flaschenhals, der den Verlust verursacht? Ist es die Tatsache, dass alles auf einer lokalen Maschine läuft? Könnte es sein, dass die Web-Socket-Bandbreite zu klein ist? Wäre ich besser mit WebRTC? Oder ist es etwas ganz anderes?

+0

Wenn Sie keine Netzwerkprobleme haben, bedeutet das Verlieren von Nachrichten, dass Sie sie nicht schnell genug lesen. Ohne Code können wir Ihnen keine Antwort geben. – JimB

+0

"Wäre ich besser mit WebRTC" Wir können Ihnen nicht sagen, wenn Sie nicht sagen, was der Zweck Ihrer Anwendung ist, wie Benutzer miteinander verbunden werden (ist P2P überhaupt eine Option?) Und was Ihre erwarteten Benutzer- Basis wird sein. – Kevin

+1

Alles, was ich sagen kann ist, UDP garantiert keine Paketankunft. Wie es jetzt aussieht, ist nichts ungewöhnlich, gibt es viel Verkehr in Ihrem Netzwerk? Das könnte leicht zu mehr Paketverlust in UDP-Verbindungen führen. – Kevin

Antwort

2

Es ist schwer zu sagen, wo genau der Engpass in Ihrem Fall ist.

Aber UDP ist ein unzuverlässiges Protokoll (kann Daten verlieren), während WebSockets (die TCP verwendet) nicht ist. Dies bedeutet, dass die Nachrichten wahrscheinlich von einem Prozess verloren gehen, der die UDP-Daten liest oder schreibt. Ein solcher Paketverlust kann beispielsweise auftreten, weil diese Anwendungen im Allgemeinen zu langsam sind, um die Daten zu lesen, oder weil die Socket-Puffer zu klein sind, um Schwankungen der Lese-/Schreibgeschwindigkeit, die durch Prozessplanung oder ähnliches verursacht werden, zu bewältigen.