文章目录
在上一篇文章 WebRTC系列-网络传输之3网络连接的建立过程中介绍了connection的创建,然后将创建的connection保存在列表中;
通过前面的系列文章,在webrtc中本地设备的每个网络信息是一个
Port
,远端每个网络信息叫做
Candidate
,对于每个port和Candidate都有relay,host,reflex等几种,那么port和connection的组合就有很多种可能,上节中介绍了webrtc中是如何使用这些创建一个connection然后放入到一个列表中,那么webrtc 是如何选择最佳的组合进行连接的?webrtc中是如果对多个可能的连接进行排序?
webrtc中会对所有的connection进行一个排序;这篇主要介绍其排序函数SortConnectionsAndUpdateState。这个函数中不光实现了排序,还有裁剪和连通性检测的功能;
以下代码分析基于M76;
补充
鉴于后面的文章中的connection有的状态writable
(也就是发送ping 且收到response消息后),receiving
(收到对方的stunBind消息);这两个状态都是需要先ping后才能设置,所以这里补充ping的过程:
从堆栈中也能看出这里的ping