为什么通过WebRTC发送的消息有时会以不同的顺序收到?

时间:2016-10-28 03:18:48

标签: webrtc arraybuffer rtcdatachannel

我将ordered set设置为true,但是如果在短时间内(<1秒)发送了许多(1000或更多)消息,则收到的消息不会以相同的顺序接收。

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

如果需要,我可以提供一个最小的例子来重现这种奇怪的行为。

我还使用bufferedAmountLowThreshold和相关事件来延迟发送缓冲量太大。我选择2000但我不知道最佳数字是多少。我在短时间内收到如此多邮件的原因是因为我不想溢出一次发送的最大数据量。所以我将数据分成800字节包并发送。我再次不知道1条消息的最大大小是多少。

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

对于未分成太多消息的小数据,一切正常。对于大文件,该错误会随机发生。

1 个答案:

答案 0 :(得分:4)

在2016年11月1日,有一个错误让dataChannel.bufferedAmount值在事件循环任务执行期间发生变化。因此,依赖此值可能会导致意外结果。可以手动缓存dataChannel.bufferedAmount,并使用它来防止此问题。

请参阅https://bugs.chromium.org/p/webrtc/issues/detail?id=6628