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

为什么通过WebRTC发送的消息有时会以不同的顺序接收?,webrtc,arraybuffer,rtcdatachannel,Webrtc,Arraybuffer,Rtcdatachannel,我使用ordered设置为true,但是,当许多(1000或更多)消息在短时间内(

我使用ordered设置为true,但是,当许多(1000或更多)消息在短时间内(<1秒)发送时,接收到的消息并非全部以相同的顺序接收

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;

对于没有拆分为太多消息的小数据,一切都可以正常工作。该错误仅在大文件中随机发生。

在2016/11/01年,存在一个错误,该错误允许在事件循环任务执行期间更改
数据通道.bufferedAmount
值。因此,依赖此值可能会导致意外结果。可以手动缓存
数据通道.bufferedAmount
,并使用它来防止此问题


请参见

这是什么浏览器?它发生在firefox和chrome之间,两种方式我都不认为WebRTC保证消息顺序。你有没有看到文件上说是这样的,“如果设置为false,则允许按顺序传递数据。默认值true可保证按顺序传递数据。”重新编译案例将非常有用。我建议向WebRTC bug追踪器提交一个bug: