在WebRTC中,参与者是否需要连接到同一个TURN服务器?

In WebRTC, is it required for participants to be connected to the same TURN server?

在 WebRTC 中,当由于流量增加而不得不增加 TURN 服务器的数量(水平缩放)时,似乎有两种方法可以解决这个问题。

  1. 第一种方法是简单地拥有多个 TURN 服务器并将它们直接暴露在互联网上,并向客户端明确提供它们的完整列表。虽然,我听说这会减慢发现过程,但这似乎是一种可能的方法。
  2. 第二种方式是在负载balancer/1 IP后有多个TURN服务器,并提供1个地址给客户端。在这种情况下,负载均衡器将完成将请求分发到不同服务器的工作。

在我采用的任何一种方法中,都不能保证同一 room/group 中的所有参与者都将连接到同一 TURN 服务器。我想知道这样可以吗? TURN 和客户端之间的通信是否是无状态的,以便对等点可以连接到任何一个可用的 TURN 服务器,并且仍然可以进行数据中继?

TURN 只是在 TURN 服务器上打开一个 (udp) 端口。 TURN 服务器将解包客户端发送给它的 STUN 数据包(STUN 发送指示或通道)并将它们发送到远端。远程端可能是另一个 TURN 服务器,但 TURN 服务器不关心——客户端也不关心。就使用的协议而言,它看起来像这样:

Client --(STUN)-->TURN Server --("raw" udp)-->Another TURN Server--(STUN)-->Second client
Client --(STUN)-->TURN Server --("raw" udp)-->Second client

请注意,两个客户端都可能使用 TURN over TCP 与各自的 TURN 服务器通信,但分配通常通过 udp(在 webrtc 中)进行。

第一种方法更常见,在参与者被分配到最近的 TURN 服务器位置的情况下效果更好,如果参与者来自不同大陆,该位置可能会有所不同。