Peerjs 如何判断与对等点的连接是否已成功建立?

问题描述 投票:0回答:1

peerjs有没有办法在使用

peer.connect()
时判断连接是否成功。阅读文档,为
DataConnection
发出的唯一事件是
data
open
close
error
。如果没有建立连接,则
error
不会发出。

我正在尝试通过发送数据块来创建点对点文件传输。我当前的流程是首先连接到用户并保存该连接以供将来使用。然后我想向他们发送一条消息,表明转账已初始化,以便他们可以接受或拒绝转账。

我的大问题是当无法建立连接时没有发出

error
。您可以将错误处理程序附加到对等点本身,但它只会发出类似
cannot connect to peer {peerid}
之类的通用错误。这并不是很有用,因为我必须不可靠地解析该字符串才能获取连接 ID。所以真的没有办法知道
peer.connect({peerid})
是否真的连接了。

因此,如果我要编写一个函数来连接到对等点,那么现在确实有办法知道连接是否成功。所以像这样:

async function connect(to) {
  return new Promise((resolve, reject) => {
    const conn = peer.connect(to)

    // This doesn't exist
    conn.on('success', () => {
      connections.set(to, conn)
      resolve(conn)
    })

    // This exists but doesn't emit on unsuccessful connection
    conn.on('error', (err) => reject(err))
  })
}

然后,如果我可以存储连接,我就可以获取连接并用它发送。

function send(to, data){
  const conn = connections.get(to)
  if(!conn) throw new Error('No connection available')

  conn.send(data)
}

所以目前我求助于使用

listAllPeers()
函数来获取已连接对等点的列表。然后在
setInterval
中运行它,直到找到对等点。这似乎比需要完成的工作多了一点,并且还需要对对等服务器进行额外的调用,除了在连接之前检查对等点是否可用之外,这似乎很愚蠢。我还可以建立一种机制来尝试按一定时间间隔发送消息并等待响应。这一切似乎都是一个糟糕的解决方案。

那么有没有一个好的方法来判断连接是否已建立或者我是否坚持当前的解决方案?

javascript peerjs
1个回答
0
投票

只需使用

conn.on("open");

const conn = peer.connect(to)

// This exists
conn.on('open', () => {
  connections.set(to, conn)
  resolve(conn)
})

// This exists but doesn't emit on unsuccessful connection
conn.on('error', (err) => reject(err))
© www.soinside.com 2019 - 2024. All rights reserved.