我在我的项目中使用webrtc。但是当RTCPeerConnection.iceConnectionState='closed'
它没有从浏览器中删除时(谷歌浏览器67.0.3396.99( 。
我使用了RTCPeerConnection.close()
,之后我将连接对象设置为null
.但它仍然在chrome://webrtc-internals/中展示。问题是我的应用程序中可能有太多连接,因此当连接未清除时,我无法在一段时间后创建任何新连接。它在我的应用程序中显示太多连接错误。有人可以帮我解决问题吗?
谢谢
这是Chrome中一个长期存在的问题,我一直在跟踪这个问题。RTCPeerConnection
没有及时收集垃圾。随着时间的推移,我注意到,尤其是在选项卡之间切换时,RTCPeerConnection
最终都会被垃圾回收。
限制似乎是 500 个连接,因此请尝试限制您建立的连接数量。
以下是引用此错误的一些链接:
https://bugs.chromium.org/p/chromium/issues/detail?id=825576 https://bugs.chromium.org/p/chromium/issues/detail?id=429600
编辑:
一个黑客的解决方案可能是在iframe中创建连接。我记得删除 iframe 时连接是 GC'd 的。
嗯,我想这是一个功能,旨在让您事后检查您的连接。
当我关闭或重新加载具有连接的选项卡时,它们似乎立即被删除。可能与Eric Guan提到的iframe技巧起作用的原因相同。
对于webrtc,你应该使用websocket服务器,默认情况下浏览器只允许每个客户端的连接数量限制,这不是服务器限制,而是浏览器限制。
此外,您可能会看到RTCPeerConnection.iceConnectionState='closed'
因为您需要构建一个信令服务器,或者WebRTC不会打开连接,WebSockets是构建信令服务器的非常有用的解决方案,请参阅示例