如何解决存储 WebRTC 连接以供以后使用的正确方法是什么?
我正在使用 WebRTC 和 IndexedDB 实现分布式哈希表,但遇到了一个我无法找到正确解决方案的问题。我有一个简单的应用程序,我一直在使用它来探索 WebRTC,并且我成功地通过数据通道发送了数据。
为每个保存的节点都保持连接是不可能的,但每次重新发送信号也很笨拙。通常为此,您只需保存 IP、端口和 ID,但 WebRTC 需要的不止这些;下面是我用来尝试检索连接的代码,前一个会话的信息存储在“会话”对象中:
function retrieve() {
console.log("Retrieving peer connection");
pc = new RTCPeerConnection(pcConfig);
pc.localStream = session.dataChannel;
pc.onicecandidate = () => {};
pc.onremovestream = (e) => console.log("Remote stream removed.");
if(initiator) {
pc.createOffer().then((sessionDescription) => {
pc.setLocalDescription(sessionDescription);
});
} else {
pc.createAnswer().then((sessionDescription) => {
pc.setLocalDescription(sessionDescription);
});
}
pc.setRemoteDescription(session.remoteDescription);
cands = session.candidates;
cands.map((cand) => {
pc.addIceCandidate(new RTCIceCandidate({
sdpMLineIndex: candidate.label,candidate: candidate.candidate,}));
});
}
这确实有效,但它会导致一些错误,我担心这可能表明存在问题。第一个发生在两端:
InvalidStateError: Cannot set remote answer in state stable
在我的测试中,第二个仅发生在产品方面:
InvalidStateError: Cannot add ICE candidate when there is no remote SDP
出于某种原因,如果我根本不提供或不回答,并且只是恢复候选人,数据流甚至可以正常工作;这种情况下的错误是双方的后一个错误。
这是怎么回事?我需要担心它,或者我可以继续吗?作为一个附带问题,这是解决这个问题的愚蠢方法吗?显然错过了替代方案?
编辑:根据这些错误,我现在也尝试了多种重新排序这些步骤的方法,但结果并没有得到太多;但是,这种方法确实允许重新连接真正的连接,并且即使我在手机上更改网络也不会导致信令问题,因此我将继续测试这种方法的局限性。不过,我仍然想知道导致这些错误的确切原因,因为它们似乎并不一定表明它们似乎表明了什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。