46个版本 (breaking)

0.47.0 2024年8月9日
0.46.1 2023年12月9日
0.46.0 2023年11月5日
0.45.0 2023年6月20日
0.16.0 2020年2月14日

#1688 in 网络编程

Download history 19632/week @ 2024-04-25 21179/week @ 2024-05-02 20956/week @ 2024-05-09 23463/week @ 2024-05-16 22905/week @ 2024-05-23 17433/week @ 2024-05-30 16660/week @ 2024-06-06 21380/week @ 2024-06-13 14225/week @ 2024-06-20 12595/week @ 2024-06-27 11969/week @ 2024-07-04 15226/week @ 2024-07-11 16556/week @ 2024-07-18 16878/week @ 2024-07-25 17126/week @ 2024-08-01 19589/week @ 2024-08-08

72,997 monthly downloads
用于75个crate(直接使用4个)

MIT授权

1.5MB
27K SLoC

实现了Gossipsub协议。

Gossipsub是一种P2P pubsub(发布/订阅)路由层,旨在扩展floodsub和meshsub路由协议。

概述

注意:Gossipsub协议规范(https://github.com/libp2p/specs/tree/master/pubsub/gossipsub)为路由协议提供了一个概述。对于更详细的信息,应查阅这些规范。

Gossipsub是meshsub(用于数据)和randomsub(用于mesh元数据)的结合。它通过meshsub构建提供有界度数和放大因子,并使用randomsub技术通过gossip传播元数据来增强它。

路由器维护一个覆盖网络,其中包含用于高效发送消息和元数据的对等节点。对等节点使用控制消息在网格网络中广播和请求已知消息,以及订阅/取消订阅主题。

重要差异

本节概述了当前实现与其它实现之间可能存在的差异,这是由于当前规范中未定义的元素。

  • 主题 - 在gossipsub中,主题可通过hash_topics配置参数配置。主题类型为TopicHash。当前的Go实现使用原始的utf-8字符串,这是rust-libp2p中的默认配置。可以通过将hash_topics配置参数设置为true来对主题进行哈希(SHA256哈希后base64编码)。

  • 序列号 - 在gossipsub网络上,消息通过源 PeerId 和消息的nonce(序列号)来标识。在此实现中,序列号以原始字节的形式通过网络发送。它们是64位大端无符号整数。当消息被签名时,它们是从随机值开始的单调递增整数,并在u64::MAX处循环。当消息未签名时,它们是随机选择的。注意:在当前的Go实现中,这些数字是连续的。

节点发现

Gossipsub本身不提供节点发现。节点发现是P2P网络中的节点交换彼此信息的过程,其目的之一是提高对网络引导节点故障或更换的抵抗力。

节点发现可以通过结合Kademlia协议和Identify协议来实现。有关更多信息,请参阅Kademlia实现文档。

使用Gossipsub

Gossipsub配置

Config 结构体指定了各种网络性能/调整配置参数。具体来说,它指定了

此结构体实现了 Default 特性,可以通过 [Config::default()] 进行初始化。

行为

Behaviour 结构体实现了 libp2p_swarm::NetworkBehaviour 特性,允许它作为 libp2p_swarm::Swarm 中的路由行为。此结构体需要一个 PeerIdConfig 实例。

示例

有关如何使用gossipsub的示例,请参阅聊天示例

依赖项

~10-20MB
~271K SLoC