0

我的情况是我需要在位于同一网络上的两台计算机之间建立一个双向信号通道。它实际上只是来回发送“ping”。两台计算机可以被视为具有相同的特权。

我试图使用 peer.js 抽象的 webrtc 打开一个简单的数据通道。我想尽可能在​​两个客户端上使用相同的代码。

理想的解决方案是:两个用户可以访问网站并自动连接在一起,而无需选择要连接的 ID/远程 ID。

我不明白:是否需要专门指定呼叫者/听众或双方都可以开始连接?谁能指出这种连接的最简单实现?我正在为他们的服务器使用免费的开发密钥来运行连接代理。谢谢!

4

2 回答 2

1

如果您托管自己的 PeerJS 服务器(这在 heroku 上非常简单,他们的 repo 上有一个“部署到 heroku ”按钮),您可以使用它来获取所有已连接对等点的列表。

listAllPeers(function cb(list){...});

它发送所有已连接对等点的列表,您可以编写一个随机发生器来返回一个 ID 并将这些对等点连接在一起。您还可以在屏幕上填充列表并让用户选择其中任何一个。在这种情况下,peer id 是由服务器自动为您生成的。

于 2016-05-05T11:14:30.643 回答
1

使用 peer.js,您必须知道要连接的对等方的连接 ID。这意味着您需要一些服务器端逻辑来代理连接。

如果你总是想连接最新的两个传入客户端,你可以简单地从 1 作为 id 开始,尝试构建 Peer,当它失败时,增加 id 并重试。然后,如果你用奇数成功了,什么也不做,当你用偶数成功时,打开一个到 yourid - 1 的连接并开始使用这个连接:

// Use id prefix so we don't collide with other users on peer cloud server
let id_prefix = 'quarnos-';
let id = 0;
let peer = null;
let connection = null;

// Try to initialize peer using incrementing id
do {
  id++;
  peer = new Peer(id_prefix + id);
} while (!peer);

// When someone connects to us, save connection and log message
peer.on('connection', function(incoming_connection) {
  incoming_connection.on('data', function(data){
    if (!connection) {
      connection = incoming_connection;
      connection.send('connection established');
    }
    console.log(data);
    // Here you could put some timed connection.send() logic to make it go back and forth between peers, as requested in the OP
  });
});

// A peer with an even id tries to connect to the peer with id one lower (peer 2 connects to peer 1, etc.)
if (id % 2) {
  let connection = peer.connect(id_prefix + (id - 1));
  connection.on('open', function(){
    console.log('trying to establish connection to ' + id_prefix + (id - 1));
    connection.send('connection opened by ' + (id_prefix + id));
  });
}

这应该在对等 2 和对等 1 上打印trying to establish connection to quarnos-1and 您应该真正实现一些管理连接的服务器端逻辑,并可能将连接 ID 存储在 cookie 中,以便您可以在页面重新加载时重新连接到同一个对等点。connection establishedconnection opened by quarnos-2

于 2015-09-03T12:51:47.433 回答