如何在JavaScript中正确销毁RTCPeerConnection?



当我创建一个new RTCPeerConnection()时,据我所知,我无法使用peer.close((销毁它,并且一段时间后我耗尽了资源。当网页创建大量RTCPeerConnection时,它会在大约 600 次尝试后停止工作,并在 Chrome 中抛出以下错误:

未捕获的 DOMException:无法构建"RTCPeerConnection":无法创建如此多的对等连接

这是一个测试脚本,它将帮助您获取错误。它只是说明性的,即使创建对等体的速度慢得多,问题也会发生:

var i = 1;
function peer() {
var peer = new RTCPeerConnection();
setTimeout(() => {
peer.close();
peer=null;
}, 10);
console.log(i++);
}
setInterval(peer, 20);
// run the script and wait on console to see the error

我希望它在调用peer.close((时释放所有资源,或者至少在peer设置为null时释放所有资源,所以我看不出浏览器为什么会抛出有这么多PeerConnections的错误。我做错了什么吗?如何正确销毁对等体?谢谢

尝试将对等设置为 null,以便对其进行垃圾回收。请参阅实施限制的人员的这些说明。如果这不起作用,请在该邮件列表线程中询问

好吧,这是令人困惑的谜团,幸运的是它已经解决了,我将尝试给您一个例子,以便任何阅读这篇文章的人都可以了解到底发生了什么。

假设你已经构建了自己的程序,可以对单个文件夹中的文件进行计数,并且你命令程序对文件夹C:\Files 上的文件进行计数

该文件夹路径包含 500 个文件 。 该程序最多需要1个小时才能读取500个文件,这是他的最大能力,所以你给他命令并按回车键。

一个小时后,你回来看到程序是(死的(,你调查出什么问题?然后你发现,由于他每小时最多读取500个文件的能力,而文件夹有500个文件,所以他不可能出错,但是错误出现是因为有人不断在这个文件夹上扔文件,就像无限循环一样, 就像他需要 1 秒钟才能读取一个文件,而在同一秒钟内,还有 5 个文件以累积方式出现 他开始计数和计数,而新文件被累积计数。

这正是你的情况,Chrome浏览器在一秒钟内关闭了对等连接,而在这一秒内,你向他抛出3-4个新的对等连接,这使得Chrome浏览器在控制台上标记错误之后,因为控制台后台的计算表明这是无穷大,迟早会显示堆栈错误。 其中一部分您正在通过设置使用这些值的间隔时间来淹没浏览器缓存。

我一直在追踪这个将近三个小时,这就是我最终得到的结果. 我将很快编辑这篇文章并添加有关如何解决它的解决方案。

好的,我刚刚完成了代码的调整,这是我最终得到的运行截图代码,并告诉我您是否在Chrome控制台上看到错误 注意:你可以删除SIP Java脚本,我用它来跟踪你的错误。

希望我的帖子将来能帮助某人.

祝你好运

<script src="http://sipjs.com/download/sip-0.7.2.min.js"></script>
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">
<script>
var i = 1;
function peer() {
var peer = new RTCPeerConnection();

peer.mediaHandler = null;
peer.onicecandidate = null; 
peer.onaddstream = null; 
peer.close(i);
setTimeout(() => {
console.log('Ending Call');
}, 3500);
console.log(i++);
}
setInterval(peer, 500);
hangUp = () => {
let { peer} = this.state;

peer.close();

this.setState({
peer: null,


});
};

</script>

相关内容

  • 没有找到相关文章

最新更新