我试图通过列出所有对等点并向每个对等点发送消息来在 PeerJS 中创建广播功能。我的客户代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
<script src="http://cdn.peerjs.com/0.3/peer.js"></script>
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script type="text/javascript">
const peer = new Peer({host: '127.0.0.1', port: 4982, path: '/', debug: 2});
peer.on('open', function(id) {
document.getElementById('peerId').innerHTML = id;
});
peer.on('connection', function(conn) {
conn.on('data', function(data) {
console.log(data);
});
});
function bcast(message, id) {
peer.listAllPeers(function(peers) {
console.log(peers);
// remove self from peer list
peers.splice(peers.indexOf(id), 1);
if (peers.length > 0) {
peers.forEach(function(e, i) {
let conn = peer.connect(e);
conn.on('open', function() {
conn.send(message);
});
});
return true;
}
return false;
});
}
</script>
</head>
<body>
Peer ID: <p id="peerId"></p>
<button type="button" onclick="bcast('hello', id)">Broadcast Hello Message</button>
</body>
</html>
我的信令服务器代码如下:
var PeerServer = require('peer').PeerServer;
var server = PeerServer({port: 4982, path: '/', allow_discovery: true});
为了测试它,我启动服务器并打开两个浏览器选项卡,选项卡 1 和选项卡 2。然后,我单击选项卡 1 中的广播 Hello Message 按钮。我希望在选项卡 2 中登录“你好”,而不是收到此错误:
PeerJS: WARNING Offer received for existing Connection ID: dc_eyxb5yz4k4eonyb4d0f3whfr
undefined:1 Uncaught (in promise) DOMException: Error processing ICE candidate
undefined:1 Uncaught (in promise) DOMException: Error processing ICE candidate
undefined:1 Uncaught (in promise) DOMException: Error processing ICE candidate
奇怪的是,没有重新加载任何内容,如果我单击选项卡 2 中的广播按钮,它会将其记录在选项卡 1中。我是 WebRTC 的新手,因此非常感谢任何帮助。