WebRTC:TURN 服务器与滚动您自己的传递通信的自定义服务器有何不同?

WebRTC: how does a TURN server differ from rolling your own custom server that passes communication through?

在了解WebRTC的过程中,我发现了一个关于TURN服务器的难点。让我快速回顾一下我所理解的内容。

信令服务器: 是通过传递 SDP 数据包来协商 WebRTC 连接的自定义(未指定协议)实现。大多数 fun/wacky 实现是 copy/paste SDP 数据包以纯文本形式显示 Chris Ball(旁注:谁说“实现”意味着您必须编写一些东西?:-D) .

一个 STUN 服务器: 它会告诉您可访问的 IP + 端口。再见NAT!哦,只有80%的情况。

另外 20%,我对 TURN 服务器 的理解是:双方(或更多)P2P 连接方都可以访问的服务器,通过 TURN 服务器从这些方中继数据( Traversal Using Relays Around Nat)并发送给对方。在 RFC 5766.

中有描述

我的情况(以及由此产生的问题)

  1. 我有一个信令服务器(耶!)
  2. 我有一个 STUN 服务器(欢呼!)
  3. 我有一个 NodeJS 服务器 运行 Socket.io 当 P2P 通过信令和 STUN 服务器失败时。它只是获取传入流量并将其广播给需要收听的任何人。

我知道我的服务器是定制的,可以实现与 TURN 服务器相同的功能。

我的问题与 TURN 服务器相比,这种定制服务器有何不同?

注意:在我的例子中它是 NodeJS + Socket.io,但它可以是任何自定义构建的服务器(为了好玩,我还创建了一个 Ruby/Rails 使用 WebSockets 实现而不使用 HTTP 长轮询作为后备)。

好吧,也许是因为当有一些像 coturn and restund 这样好的免费实现时,我们不希望从头开始构建中继服务器的开销。您需要花费大量时间才能达到相同级别的性能和可伸缩性。

此外,有了 TURN 服务器,您就不需要单独的 STUN 服务器。

通常 socket.io 和 Node 仅用于发信号(和发送自定义消息)。一个简单的 CoTurn 实例可以 运行 on a 5$ vps.

除了作为回合服务器使用外,它还提供眩晕功能,但根据我的经验,同时使用 public google STUN 总是一个好主意(除了在中国,它无法访问).

问题是:您是否使用您的实施检查了网络和系统负载并将其与经典的 TURN 设置进行了比较?