2

我一直在考虑RTCPeerConnection使用 WebRTC 以分散的方式建立一个。这意味着只使用服务器进行 NAT 穿越

我知道信令过程是必要的,但是是否可以直接与对等RTCSessionDescription方交换对象,而不必使用另一个通信通道?

4

2 回答 2

6

假设您正在尝试将对等点 A(IP 地址 1.2.3.4)与对等点 B(IP 地址 5.6.7.8)连接。

   A                      B
1.2.3.4                5.6.7.8

您需要做的第一件事是让他们中的至少一个知道另一个对等方的 IP:PORT,以便他可以发起连接。

一旦 A 知道 B 的 IP 地址,A 就可以在其 IP:PORT 端点上联系 B。

一开始,它们之间没有通道,以后会有,但是现在,您只是不知道要将数据发送到哪里(IP:PORT?)

现在我们需要以某种方式获取 A 的 IP:PORT 并让 B 知道它。WebRTC 中没有定义标准,因此您可以选择任何方式将 A 的 IP 地址获取到 B。(Websocket,Google 的 Channel API,如果您足够疯狂,甚至可以发送电子邮件)。

  Some communication channel
      (i.e. Websocket)
        /           \
1.2.3.4:port         \
      /               \
     /                 >
   A                      B
1.2.3.4                5.6.7.8

现在,B 知道 A 的端点,他可以发起呼叫、发送消息、创建数据通道(现在我们有了它,为时已晚,对吧?:)

用另一个问题回答您的问题……您怎么知道将 A 的 IP:PORT 发送到哪里?一开始没有通道,所以我们需要一些其他类型的通信。

不同的情况是,如果你已经以某种方式连接它们,使用@tom 帖子中提到的某种 DHT(但这基本上也只是 Websocket 的替代方案等)

要在评论中回答您关于 DHT 的问题,到目前为止,在 Web 浏览器中构建 P2P DHT 如此复杂/不可能的原因是我们无法在浏览器对等方之间进行直接通信 - 这基本上是 DataChannel API 今天给我们的.

DHT 的要点在于,在它们之间交换/转发/保留信息(在本例中为 RTCSessionDescription)的对等点之间存在通信,我个人认为使用 DataChannel 是最好的方法(也许是今天唯一的一种)如何做到这一点。

正如我在帖子中已经提到的,DHT 只是另一种通信方式,如何将您的端点信息传输到其他对等方。您可以使用集中式服务器解决方案,但如果它不适合您的设计,您可以改用 DHT。

于 2013-06-07T12:06:40.083 回答
1

不,信令的重点是建立对等连接。每一方生成 ICE 候选(本质上是 IP 地址)并通过信令通道与另一方共享它们。然后每一方使用 ICE 候选者来尝试各种对等连接(本地、STUN、TURN)。

也就是说,您可以构建使用 DHT 来发送信号。请参阅http://webp2p.org/

于 2013-06-07T06:17:01.813 回答