1. 程式人生 > 實用技巧 >webrtc連通性檢查

webrtc連通性檢查

1. 保活機制

webrtc會每隔兩秒,檢查一下網路狀態是否有變化,若是有變化,就重新探測網路,選擇其他的傳輸方式。程式碼如下:

const int kNetworksUpdateIntervalMs = 2000;

void BasicNetworkManager::UpdateNetworksContinually() {
  UpdateNetworksOnce();
  thread_->PostDelayed(RTC_FROM_HERE, kNetworksUpdateIntervalMs, this,
                       kUpdateNetworksMessage);
}

void BasicNetworkManager::UpdateNetworksOnce() {
  if (!start_count_)
    return;

  RTC_DCHECK(Thread::Current() == thread_);

  NetworkList list;
  if (!CreateNetworks(false, &list)) {
    SignalError();
  } else {
    bool changed;
    NetworkManager::Stats stats;
    MergeNetworkList(list, &changed, &stats);
    set_default_local_addresses(QueryDefaultLocalAddress(AF_INET),
                                QueryDefaultLocalAddress(AF_INET6));
    if (changed || !sent_first_update_) {
      SignalNetworksChanged();
      sent_first_update_ = true;
    }
  }
}

程式碼函式呼叫關係如下:

P2PTransportChannel::AddRemoteCandidate
P2PTransportChannel::SortConnectionsAndUpdateState
P2PTransportChannel::MaybeStartPinging
thread()->Post(RTC_FROM_HERE, this, MSG_CHECK_AND_PING); (連線建立才會通知無ping,在P2PTransportChannel::IsPingable介面判斷)
P2PTransportChannel::OnCheckAndPing()

2. 連線刪除

轉載於:https://my.oschina.net/xgcode/blog/2870333