我一直在考虑使用WebRTC以分散的方式设置RTCPeerConnection
。这意味着仅使用服务器进行NAT遍历。
我知道信令流程是必要的,但是可以直接与同行交换RTCSessionDescription
个对象,而不必使用其他通信渠道吗?
答案 0 :(得分: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就可以联系B的IP:PORT端点。
一开始,它们之间没有通道,你以后会有它,但是现在,你只是不知道你想要发送数据的位置(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? 一开始没有频道,所以我们需要其他一些其他类型的沟通。
不同的情况是,如果你已经以某种方式连接它们,使用某些DHT,如@tom在帖子中提到的那样(但这基本上也只是Websocket的替代品等)。
在评论中回答关于DHT的问题,在网络浏览器中构建P2P DHT的原因是如此复杂/不可能,直到现在我们没有可能在浏览器之间直接通信同行 - 这基本上是DataChannel API今天为我们提供的。
DHT的观点是,对等体之间存在交换/转发/保留信息(在本例中为RTCSessionDescription)之间的通信,我个人认为使用DataChannel是最好的方式(也许是今天唯一的一个)怎么做此
正如我在帖子中已经提到的,DHT只是另一种通信方式,如何将端点信息传输给其他对等方。您可以使用集中式服务器解决方案,但如果它不适合您的设计,您可以转而使用DHT。
答案 1 :(得分:1)
不,信令的重点是建立对等连接。每一方生成ICE候选(实质上是IP地址)并通过信令信道与另一方共享它们。然后,每一方都使用ICE候选者来尝试各种点对点连接(本地,STUN,TURN)。
也就是说,您可以使用DHT进行信号传输。见http://webp2p.org/。