RTC 数据通道的行为不稳定

erratic behaviour of RTC datachannel

本文关键字:不稳定 数据通道 RTC      更新时间:2023-09-26

我正在使用RTC数据通道在两个对等体(两个chrome浏览器,一个Windows PC和另一个Mac)之间每100ms(使用超时)传输数据(大约200kb)。

由于某种原因,突然无缘无故,通常在大约 5 分钟后,其中一个对等方停止接收数据,再过一段时间,另一个对等方也停止接收数据。

经过大量调试,我发现两个对等方仍在传输数据,从网络流量分析中,很明显另一台机器正在接收数据,但浏览器没有调用channel.onmessage

我的部分代码:

function timepot1(){ // I have cheked, this keeps getting called, no problem here
    try {
         ....
         channel.send(JSON.stringify(jsObject));
    }catch (err) {
        console.log(err);
    }   
    setTimeout(timepot1, 100);
};

是否有一些已知的错误导致了这种情况,还是因为我同时在同一通道上传输了来自两个对等方的大量数据?


编辑

显然,当我更改为单通道时,我使用了两个数据通道(每个方向一个用于传输)。它停止工作的速度要快得多。

这听起来很愚蠢,但是当我清除控制台(在浏览器中)时(chrome浏览器中),该浏览器上的数据接收几乎立即停止(但eh机器仍然接收数据)。

Chrome 中有一个错误(实际上是 usrsctp lib),如果 16 位序列计数器的包装发生在较长的消息中间,则会错误地处理它。它现在已经修复 - 所以值得再次尝试你的代码。看:铬问题664283