在区块链的实际应用中,要经常用到p2p广播,所以节点广播是必不可少的功能,目前想到的有以下几个方案
udp广播
基于udp的广播,其优点是实现简单,效率高,缺点是只有处于同一内网节点才能收到消息,局限性太大。
udp组播
基于udp的组播,其优点和广播相同,同时又不仅局限于内网,外网也可以使用组播。但外网使用组播需要网络设备的支持,只要有一集设备不支持则无法收到消息。更遗憾的是,目前绝大部分的网络设备都是不支持组播的。
节点轮询
遍历所有节点,依次对每个节点发送消息,优点是不受网络环境限制,真正的能做到所有节点的广播。缺点是效率,如果节点很少还勉强可以,节点太多光是所有节点都转一遍的时间都是无法接受的。
节点分组轮询
节点之间交叠分组,保证每个节点至少同时处于两个分组当中,当有消息需要广播时,只在自己的组内进行轮询广播,组内其他成员接收到广播消息后,再向自己的另一个组内进行轮询广播,达到一传十,十传百的效果。
结论
从以上各个方案的特点来看,节点分组轮询的方案最居可行性。