【问题标题】:PeerJS text chatPeerJS 文字聊天
【发布时间】:2014-01-04 10:41:24
【问题描述】:

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

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

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

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

下面是一些我在脑海中尝试过的代码:

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

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

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

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

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

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

【问题讨论】:

  • 你找到分享id的方法了吗

标签: javascript websocket peerjs


【解决方案1】:

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 个套接字。由于这个问题已经存在几个月了,我现在要离开双插座解决方案。如果您还需要它,请告诉我。

【讨论】:

  • 艾芬豪,如果我想在同一个聊天中发送消息和文件怎么办。我在看github.com/peers/peerjs/blob/master/examples/chat.html,但这个实现对我不起作用。任何帮助将不胜感激!
  • 对不起,我刚搬到 SimpleWebRTC 和 signalmaster。我会有多个数据连接,一个用于文件,一个用于聊天。
  • 我终于有了一些工作,但我想这是错误的方式,因为每次我想发送文本或文件时都会创建一个新连接。我尝试按照您的建议仅创建两个连接,但无法成功。您能否提供一些提示如何解决?这是我的代码github.com/simo163/webrtc/blob/apprtc/app/controllers/…
  • 所以 peer.on("connection", f) 在每条消息上都被触发?如果是这样,为什么不这样保存状态: peer.on("connection", function(c){ if(chatConnected!==null) return; chatConnected = c; ...
【解决方案2】:

根据他们的文档,在不知道其 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 2016-06-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2018-03-22
    相关资源
    最近更新 更多