3

我目前正在编写一个基于 Web 的聊天客户端,其中两个人随机连接并在没有提示的情况下一起进入聊天。

我正在使用 PeerJS 库,因为我发现它对我来说是最容易理解的。不过,我正处于一个障碍点:我不确定如何实际实现文本聊天。

我在他们的网站(这里)上查看了他们的示例,并稍微修改了代码以适合我(主要是它的外观和一些输出是什么)。

我遇到的一个问题是他们的代码需要两个人手动输入另一个人的 id,如果没有两个人的验证,聊天就不会开始(意思是,他们都必须输入 id 并按下“连接”按钮)。

下面是一些我试图解决的代码:

首先,我必须监听与 PeerJS 的连接:

myPeer.on("connection", function() {...});

但同时,我想监听在同一个客户端上打开连接,因为我不想提示用户输入彼此的 ID:

myConn.on("open", function() {...})

但这是不可能的(据我所知),因为myConn在我打开与myPeer上面的侦听器的连接之前我不知道会发生什么。

我的问题是我不知道如何同时做这些。如果它有帮助的话,我正在尝试在这个旁边进行视频聊天,我都已经想通了,所以如果我能以某种方式从那个连接或其他什么东西上背下来,那也行得通。我对项目有完全的控制权,所以我几乎可以做任何我想做的事情(包括切换库,如果一个更容易使用或更开发的话)。

4

2 回答 2

2

connection事件为您提供了一个DataConnection实例。

在接收端考虑以下代码:

var peer = new Peer('clientID');
peer.on('connection', function(con){
    con.on('data', function(data){
        console.log('Incoming data', data);
        con.send('REPLY');
    });
});

现在在发送端使用此代码:

var peer = new Peer();
var con = peer.connect('clientID');
con.on('data', function(data){ ... });
con.send('HELLO WORLD');

在发送消息之前等待连接打开很重要。对于上述情况,您可以使用con.on('open', function(){ ... });

DataConnections行为类似于 TCP 套接字。如果您想要双向通信,您可以使用来自 2 个对等方的 2 个套接字。由于这个问题已经存在几个月了,我现在要离开双插座解决方案。让我知道你是否还需要它。

于 2014-02-26T00:33:33.707 回答
0

根据他们的文档,在不知道其 ID 的情况下无法连接到对等体正如他们在此处提到的那样https://peerjs.com/docs.html#start 当我们想要连接到另一个对等体时,我们需要知道他们的同伴ID。您负责在您的站点用户之间传递对等 ID。

我建议您使用 socket.io(或您喜欢的其他即时数据传输方式)来传达这些 ID

var peer = new Peer();
peer.on('open', function(id) {
  console.log('My peer ID is: ' + id); //this will show you your ID
});

//then to connect to another peer
var conn = peer.connect('destination-peer-id'); //here you will use the destination peer that you have received using socket.io or another instant data transfer means you prefer

于 2022-02-20T19:24:19.523 回答