【发布时间】:2018-08-28 12:47:27
【问题描述】:
当我创建new RTCPeerConnection() 时,据我所知,我无法使用 peer.close() 将其销毁,并且一段时间后我的资源耗尽。当网页创建大量RTCPeerConnections 时,它会在大约 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 的错误。我做错了什么吗?如何正确销毁对等体?谢谢
【问题讨论】:
-
您的间隔计时器大约每 16 毫秒运行一次,但关闭连接的超时等待 400 毫秒。因此,随着时间的推移,您创建的连接比关闭的连接多 25 倍。为什么您会期待看到的结果之外的任何其他结果?
-
你为什么要这样做?你在负载测试什么吗? :)
-
@Pointy 超时没有区别。我已经编辑了示例代码,它还是失败了
-
@Nisarg Shah:这只是说明行为的示例代码
-
由于 Mozilla 的关闭是实验性的,它可能无法正常工作,请跟踪可以一次打开的数量,如果需要更多,请使用 websockets。此外,Mozilla 表示使用 Adapter.js 可能会更好。
标签: javascript webrtc rtcpeerconnection