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 服务器才能在生产环境中使用。
我正在使用 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 服务器才能在生产环境中使用。