6

我试图通过列出所有对等点并向每个对等点发送消息来在 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 的新手,因此非常感谢任何帮助。

4

0 回答 0