PeerJS:检测到其他对等点但连接未打开

PeerJS: Other Peer Detected but Connection Not Open

我正在使用 PeerJS 建立点对点连接。似乎我已经能够暂时建立连接,但我一直无法通过连接发送和接收数据。下面是我的代码:

var peer;
var nbcc = [];

function updatePeerConnections(){
    if (!id) return;
    if (!peer) {
        peer = new Peer(id,{key: '52hhtusf1t0rudi'});
        peer.on('open', function(conn) {
            console.log('new connection');
        });
        peer.on('connection', function(conn) {
            conn.on('open', function(){
                console.log('connected!');
                conn.on('data', function(data){
                    let o = JSON.parse(data);
                    console.log('updating car ' + o.i);
                    updateCarMarker(o.id,o.lat,o.lng);
                 });

            });            
            conn.on('error', function(err){
               console.log(err);
            });
            console.log(conn.open+': remote peer detected: '+conn.peer);
            conn.id = conn.peer;
            nbcc[conn.peer] = conn;
        });
        peer.on('error', function(err){
            console.log(err.type);
        });
        updateConnections();        
    } else {
       updateConnections();
    }
}

function updateConnections(){
    for (cm of Object.values(carMarkers)){
        if (cm.id!=id && !Object.keys(nbcc).includes(cm.id)){
            console.log('connecting to '+cm.id)
            nbcc[cm.id] = peer.connect(cm.id);
            nbcc[cm.id].id = cm.id;
            nbcc[cm.id].on('error', function(err){
                console.log(err);
            });
            nbcc[cm.id].on('open', function(){
                console.log('connected!');
                nbcc[cm.id].on('data', function(data){
                    let o = JSON.parse(data);
                    console.log('updating car ' + o.i);
                    updateCarMarker(o.id,o.lat,o.lng);
                 });
            });
        }
    }
}

在浏览器控制台上,它打印了 'new connection',然后是 'false: remote peer detected: 879874543958',其中 id 是远程对等点(浏览器中的另一个选项卡)。它从不打印 'connected!' 或任何错误消息。代码有什么问题?

我找到问题了!

在这一行:

   peer = new Peer(id,{key: '52hhtusf1t0rudi'});

我们不能自己设置可选参数'id'。相反,我们应该在 peer.on('connection',function(id){...})

中接收它

呃。为什么在不能设置该参数时允许设置该参数。这令人困惑。

如果这在本地主机上有效但在互联网上不起作用,那么您可能缺少 STUN 和 TURN 服务器。

默认情况下,peer js 使用 google 全局 stun 服务器,但您必须获得一个 turn 服务器才能在生产环境中使用。