子网内“多播转发主机”的遴选机制
子网内“多播转发主机”的遴选流程比较复杂,按照图4所示的逻辑关系大致分为以下几个步骤:
算法如下:
send_heartbeat();
while (true)
{
if (receive_multicast_msg(multicast_msg))
{
if (multicast_msg == data)
PlayData(multicast_msg);
else if (multicast_msg == heartbeat)
{
if (is_unknown_node(multicast_msg))
{
add_node(multicast_msg);
send_heartbeat();
}
else
update_node(multicast_msg);
}
}
else
{
sending_node = calculate_sending_node();
if (current_node == sending_node)
{
start_send_multicast_data();
break;
}
}
}
包括三个阶段:
1. 启动阶段
(11)单IP客户机情况如果某一子网内只有一台IP 客户机,该IP客户机首先以单播方式直接从服务器端接收信号,同时该IP客户机(从直播服务器处得到确认)自动成为该子网内的“多播转发主机”。这时客户端从多播组内接收不到任何信号,也不会发送心跳信号。
(2)多IP客户机情况当一个新的客户机加入多播组,这个新的客户机首先依然会以单播方式直连服务器端,保证信号的畅通。同时新客户机会发送心跳信号,并从多播组接收信号。
多播组内的原有客户机在收到新客户机发出的心跳信号后,也会向多播组内发送心跳信号,其中附带客户机的信息用于多播转发主机的筛选。客户机接收到心跳信号后,会更新自己的子网拓扑列表。
如果这时子网内不存在多播转发主机,收到心跳信号的客户机会根据特定的规则来计算自己是否符合多播转发主机的条件,如果符合,则开始转发多播信号。
新客户机接收到多播信号后,停止单播直连服务器。
这个过程和P2P 协议中的搜索过程有某种程度的类似。就直播的特性而言,使用非结构化的协议即可,就像Gnutella系统中,采用了等级制的组成结构:节点被分成超级节点和普通节点。这里“多播转发主机”就是超级节点,其余的客户机就是普通节点。客户机必须依赖于转发主机。
但是在继续下面的分析过程后可以发现,实际上另外的特性必须加入结构化协议的某些特性。
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。