我们正在使用 WebRTC 并试图了解它的好处。
Skype 能够为数亿人提供服务的原因之一是其分散的点对点架构,可以降低服务器成本。
WebRTC 是否允许人们构建类似于 Skype 的视频聊天应用程序,因为架构可以是分散的(即,视频流不是从广播公司通过中央服务器路由到听众,而是直接从广播公司路由到听众)?
或者,换一种说法,WebRTC 是否允许人们从本质上复制类似于 Skype 的 P2P 架构的好处?
或者你还需要类似于 Skype 的 P2P 架构的东西吗?
是的,这基本上就是 WebRTC 所做的。使用 getPeerConnection() API 的调用不会通过中央服务器发送语音/视频数据,而是使用 ICE、STUN 和 TURN 等防火墙穿越协议来实现直接的点对点连接。但是,初始调用设置仍然需要一个服务器(很可能是运行 WebSocket 实现的东西,但它可以是任何你可以弄清楚如何让 JavaScript 与之交谈的东西),以便两个客户端可以弄清楚它们是都在线,发出他们想要连接的信号,然后弄清楚怎么做(这就是 ICE/STUN/TURN 位的来源)。
然而,Skype 的 P2P 架构不仅仅是来回传递语音/视频数据。Skype 的大部分 IP 不在编解码器或协议中(其中大部分是从 Global IP Solutions 获得许可的,Google 两年前购买了该解决方案,然后将其开源,并且构成了 Chrome 的 WebRTC 实施的基础)。Skype 的真实 IP 都在 WebRTC 中,它仍然依赖于服务器:确定哪些人在线,他们在哪里,以及如何控制他们,并以大规模去中心化的方式进行。(有关一些粗略的详细信息,请参见此处。)我认为您可能可以使用DataStreamgetPeerConnection() API 的一部分来做那种事情,如果你真的非常聪明的话——但这会很复杂,而且很可能会践踏一些 Skype 专利。除非您想变得非常非常庞大,否则您可能只想运行自己的集中式存在和位置服务器,并通过标准 WebSockets 处理所有这些东西。
我应该注意到 Skype 的网络架构自创建以来已经发生了变化。它不再(据我所知)使用随机用户作为超级节点将数据从客户端 1 中继到客户端 2;它不能很好地扩展并导致结果的剧烈变化(并且惹恼了没有防火墙连接和带宽的人)。
您绝对可以使用 WebRTC 构建类似 SKype 的东西——甚至更多。:-)