代码之家  ›  专栏  ›  技术社区  ›  Chong Lip Phang

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

  •  0
  • Chong Lip Phang  · 技术社区  · 7 年前

    我正在使用PeerJ建立点对点连接。似乎我已经能够瞬间建立连接,但我无法通过连接发送和接收数据。以下是我的代码:

    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);
                     });
                });
            }
        }
    }
    

    在浏览器控制台上,它打印“新建连接”,然后打印“false:检测到的远程对等方:879874543958”,其中id是远程对等方(浏览器中的另一个选项卡)。它从未打印“连接!”也没有任何错误消息。代码有什么问题?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Chong Lip Phang    7 年前

    我发现了问题!

    这一行:

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

        2
  •  1
  •   Pradipto SenSarma    3 年前

    如果这在localhost中有效,但在互联网上不起作用,那么你可能会错过一个眩晕和一个回合服务器。

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