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. 連接刪除