【问题标题】:erratic behaviour of RTC datachannelRTC 数据通道的不稳定行为
【发布时间】:2023-04-10 14:05:01
【问题描述】:

我正在使用 RTC 数据通道在两个对等方(两个 chrome 浏览器,一个 windows pc n 其他 mac)之间每隔 100ms(使用超时)传输数据(大约 200kb)。

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

经过大量调试,我发现两个peer都还在传输数据,从网络流量分析,很明显对方机器正在接收数据,但是浏览器没有调用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 浏览器中)时,该浏览器上的数据接收几乎立即停止(但机器仍然接收数据)。

【问题讨论】:

  • 我会说这是一个错误,我会向相应的浏览器供应商报告。
  • 同意 - 向 Chrome 报告。在 Firefox 中尝试(每晚,也许是调试版本),如果是这样,您可以通过 NSPR_LOG_MODULES=datachannel:5,sctp:5,timestamp 获得调试 - 如果需要,这也可以让您通过 icky 将 SCTP 数据包转储到wireshark别名:(tcsh 别名):别名 log2pcap 'grep "SCTP_PACKET" \!:1 | text2pcap -D -n -l 248 -t "%H:%M:%S." - \!:2'

标签: javascript webrtc rtcdatachannel


【解决方案1】:

Chrome(实际上是 usrsctp 库)中存在一个错误,如果 16 位序列计数器的包装出现在较长消息的中间,则该错误会处理错误。它现在已修复 - 因此值得再次尝试您的代码。 看: Chromium issue 664283

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2020-04-12
    相关资源
    最近更新 更多