【发布时间】: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