2016-10-28 2 views
5

Ich benutze geordneten Set zu True, jedoch, wenn viele (1000 oder mehr) Nachrichten in einer kurzen Zeit gesendet werden (< 1 Sekunde) die empfangenen Nachrichten sind nicht alle in der gleichen Reihenfolge erhalten.Warum werden die über WebRTC gesendeten Nachrichten manchmal in einer anderen Reihenfolge empfangen?

rtcPeerConnection.createDataChannel("app", { 
    ordered: true, 
    maxPacketLifeTime: 3000 
}); 

Ich könnte ein minimales Beispiel angeben, um dieses seltsame Verhalten bei Bedarf zu reproduzieren.

Ich verwende auch bufferedAmountLowThreshold und das zugehörige Ereignis, um zu verzögern, wenn der Sendepufferbetrag zu groß ist. Ich wählte 2000, aber ich weiß nicht, wie die optimale Zahl ist. Der Grund, warum ich in so kurzer Zeit so viele Nachrichten habe, liegt darin, dass ich die maximale Menge an Daten, die auf einmal gesendet werden, nicht überlaufen lassen möchte. Also teile ich die Daten in 800 Bytes Packs und sende diese. Wieder weiß ich nicht, was die maximale Größe 1 Nachricht sein kann.

const SEND_BUFFERED_AMOUNT_LOW_THRESHOLD = 2000; //Bytes 
rtcSendDataChannel.bufferedAmountLowThreshold = SEND_BUFFERED_AMOUNT_LOW_THRESHOLD; 
const MAX_MESSAGE_SIZE = 800; 

Alles funktioniert gut für kleine Daten, die nicht in zu viele Nachrichten aufgeteilt werden. Der Fehler tritt nur bei großen Dateien zufällig auf.

+0

Welcher Browser ist das? – jib

+0

es passiert zwischen firefox und chrome, beide wege –

+0

Ich denke nicht, WebRTC garantiert Nachricht Reihenfolge. Haben Sie Unterlagen gesehen, die das sagen? – ssube

Antwort

4

In 2016/11/01 gibt es einen Fehler, der den dataChannel.bufferedAmount Wert während der Ausführung der Ereignisschleife Task ändern lässt. Wenn Sie sich auf diesen Wert verlassen, kann dies zu unerwarteten Ergebnissen führen. Es ist möglich, dataChannel.bufferedAmount manuell zwischenzuspeichern und das zu verwenden, um dieses Problem zu vermeiden.

Siehe https://bugs.chromium.org/p/webrtc/issues/detail?id=6628

Verwandte Themen