如果有多个选项,Chrome/webRTC 如何选择使用哪个 TURN 服务器?

如果有多个选项,Chrome/webRTC 如何选择使用哪个 TURN 服务器?

当将多个 TURN 选项传递给 RTCPeerConnection 并假设其中几个在技术上可用时,实际服务器是如何选择的?

网络性能到底起到什么作用呢?

答案1

请求函数没有指定当有多个 TURN 服务器可用时会发生什么:

本规范仅考虑使用单个 STUN 或 TURN 服务器。当该单个 STUN 或 TURN 服务器有多个选择时(例如,当它们通过 DNS 记录获知并返回多个结果时),代理应为特定会话的所有候选服务器使用单个 STUN 或 TURN 服务器(基于其 IP 地址)。这可以提高 ICE 的性能。结果是一组具有 STUN 或 TURN 服务器的主机候选对。然后,代理选择一对,并向该主机候选服务器发送绑定或分配请求。

因此,不应期待任何特殊行为。

目前,WebRTC 选择符合给定条件的第一个服务器。例如,第一个支持 UDP 连接的 UDP 服务器。

基本门户分配器

void AllocationSequence::CreateUDPPorts() {
...
  // If STUN is not disabled, setting stun server address to port.
  if (!IsFlagSet(PORTALLOCATOR_DISABLE_STUN)) {
    // If config has stun_address, use it to get server reflexive candidate
    // otherwise use first TURN server which supports UDP.
    if (config_ && !config_->stun_address.IsNil()) {
      LOG(LS_INFO) << "AllocationSequence: UDPPort will be handling the "
                   <<  "STUN candidate generation.";
      port->set_server_addr(config_->stun_address);
    } else if (config_ &&
               config_->SupportsProtocol(RELAY_TURN, PROTO_UDP)) {
      port->set_server_addr(config_->GetFirstRelayServerAddress(
          RELAY_TURN, PROTO_UDP));
      LOG(LS_INFO) << "AllocationSequence: TURN Server address will be "
                   << " used for generating STUN candidate.";
    }
  }
...

相关内容