4个版本 (2个重大更新)

0.3.0 2021年4月23日
0.2.2 2021年3月2日
0.2.1 2021年1月26日
0.1.0 2021年1月14日

#22 in #libp2p

24 每月下载量
用于 libp2p-rs

MIT 许可证

525KB
9K SLoC

libp2prs-floodsub

基线洪水协议

这是libp2p-rs的官方pubsub实现。

使用方法

步骤1:创建floodsub并获取处理器

    let floodsub = FloodSub::new(FloodsubConfig::new(local_peer_id));
    let handler = floodsub.handler();

步骤2:将处理器注册到swarm

    let swarm = Swarm::new(keys.public())
        .with_transport(Box::new(tu))
        .with_protocol(Box::new(handler))
        .with_ping(PingConfig::new().with_unsolicited(true).with_interval(Duration::from_secs(1)))
        .with_identify(IdentifyConfig::new(false));

步骤3:获取floodsub控制和然后使用swarm控制启动

    let floodsub_control = floodsub.control();
    floodsub.start(swarm.control());

步骤4:启动swarm

    // listen on
    swarm.listen_on(vec![listen_addr]).unwrap();
    // start swarm
    swarm.start();
    // new connection
    swarm_control.new_connection(remote_peer_id).await.unwrap();

步骤5:发布/订阅/ls/getPeers

订阅

    task::spawn(async move {
        let sub = control.subscribe(b"test").await;
        if let Some(mut sub) = sub {
            loop {
                if let Some(msg) = sub.ch.next().await { log::info!("recived: {:?}", msg.data) }
            }
        }
    });

发布

    floodsub_control.publish(Topic::new(b"test"), msg).await;

ls

    floodsub_control.ls().await;

getPeers

    floodsub_control.get_peers(Topic::new(b"test"));

待办事项列表

  • 配置项:签名严格
  • 过滤重复消息以防止过度洪水
  • 黑名单

依赖关系

~19–36MB
~617K SLoC