Javascript 如何破坏RTC对等连接?

Javascript 如何破坏RTC对等连接?,javascript,webrtc,rtcpeerconnection,Javascript,Webrtc,Rtcpeerconnection,我可以使用以下代码创建新的对等连接对象: var peer = new RTCPeerConnection(); 当这种情况发生时,chrome会在chrome://webrtc-internals/ 我想稍后销毁这个物体。怎么做?我试过了 peer.close(); 但是这似乎没有什么作用,因为peer变量仍然是rtpeerconnection类型,我仍然可以在中看到它处于活动状态chrome://webrtc-internals/ 如果我取消设置变量,比如 peer=false; 它仍

我可以使用以下代码创建新的对等连接对象:

var peer = new RTCPeerConnection();
当这种情况发生时,chrome会在
chrome://webrtc-internals/

我想稍后销毁这个物体。怎么做?我试过了

peer.close();
但是这似乎没有什么作用,因为
peer
变量仍然是rtpeerconnection类型,我仍然可以在
中看到它处于活动状态chrome://webrtc-internals/

如果我取消设置变量,比如

peer=false;
它仍然显示在
chrome://webrtc-internals/
。然而,如果我关闭网页,它会立即从
chrome://webrtc-internals/

释放RTPeerConnection对象的正确方法是什么?我这样问是因为如果我不释放它们,我偶尔会被网络浏览器拒绝创建新的RTPeerConnection,因为有太多的RTPeerConnection在使用。

实际上

peer.close();
这是一个正确的方法

您也可以这样做:

peer.close();
peer = null;
以下是来自原始WebRTC代码示例的一些片段:

function hangup() {
  console.log('Ending call');
  pc1.close();
  pc2.close();
  pc1 = null;
  pc2 = null;
  hangupButton.disabled = true;
  callButton.disabled = false;
}

您想在哪个事件中销毁它? 代码中可能缺少使连接保持打开状态的部分 这是一本完整的PDF手册,解释了WebRtc如何在浏览器上工作

我将这本书交给你,这样你就可以检查你的代码中是否有任何部分在这个案例中的某些地方使连接保持打开状态,即使你在特定事件中关闭了对等方,它仍然会显示并保留在浏览器上

至于你的问题,假设你想通过点击按钮来关闭它,我们称之为挂断按钮, //挂断

hangUpBtn.addEventListener("click", function () { 

send({ 
  type: "leave" 
});

handleLeave(); 
});

function handleLeave() { 
connectedUser = null; 
remoteVideo.src = null; 

yourConn.close(); 
yourConn.onicecandidate = null; 
yourConn.onaddstream = null; 
};
当用户断开连接时,您应该清理其连接。您可以在触发关闭事件时删除用户。将以下代码添加到连接处理程序

connection.on("close", function() { 
if(connection.name) { 
 delete users[connection.name]; 
} 
});
当用户单击挂起按钮时,它将向其他用户发送一条“离开”消息,它将关闭RTPeerConnection并在本地销毁连接

这应该会关闭rtc连接,据我记忆所及,chrome上存在漏洞,即使您关闭了连接,也会导致内存泄漏。不确定该漏洞是否仍然存在

当用户退出时还有一件事,例如关闭浏览器窗口 如果我们仍然处于“提供”、“回答”或“候选人”状态,这可能会有所帮助


我不完全理解为什么要删除用户[something],因为我的代码中没有这样的变量。此外,我没有任何send()函数。也许您正在考虑使用某个rtc框架?我假设您正在两个用户A和用户B之间建立连接,因此当其中任何一个用户单击挂断按钮时,您应该删除用户A和用户B的连接。通过删除连接,我使用send{type:leave}通知其他用户断开连接。你能告诉我更多关于你在应用程序上使用对等点的详细信息吗?你能分享你有问题的页面的全部代码吗?你能在这里@ahmedshthnk you帮助我吗。我意识到即使我在
chrome://webrtc-internals/
即使在使用.close()时,它也会将其识别为已关闭,但稍后会将其从列表中删除
  connection.on("close", function() { 

  if(connection.name) { 
  delete users[connection.name]; 

  if(connection.otherName) { 
  console.log("Disconnecting from ", connection.otherName); 
  var conn = users[connection.otherName]; 
  conn.otherName = null;  

  if(conn != null) { 
  sendTo(conn, { 
  type: "leave" 
  }); 
  }  
  } 
  } 
  });  

  connection.send("Hello world"); 
  });