当我创建一个new RTCPeerConnection()
时,据我所知,我无法使用peer.close()销毁它,并且一段时间后,我用光了资源。网页创建大量RTCPeerConnection
时,经过约600次尝试后它停止工作,并在Chrome中引发以下错误:
未捕获的DOMException:无法构造'RTCPeerConnection':无法创建那么多PeerConnections
这是一个测试脚本,它将帮助您获取错误。仅是说明性的,即使对等体的创建速度慢得多,也会出现该问题:
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太多。我做错了什么吗?如何正确销毁同伴?谢谢
答案 0 :(得分:0)
尝试将peer设置为null,以便收集垃圾。请参阅实施限制的人的these notes。如果这样不起作用,请在该邮件列表线程中询问
答案 1 :(得分:0)
好的,那是个令人困惑的谜团,幸运的是,它已经解决了,我将尝试举一个例子,以便任何人阅读这篇文章后都可以准确了解正在发生的事情。
假设您已构建了自己的程序,该程序可以对单个文件夹中的文件进行计数,并且已命令该程序对文件夹C:\ Files中的文件进行计数
该文件夹路径包含500个文件。 该程序最多需要1个小时来读取500个文件,这就是他的最大能力,因此您给他命令并按Enter。
一个小时后,您回来了,看到程序是(Dead),您在调查什么问题?那么您会发现,由于他的最大能力是每小时读取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>