mitch: asynchronous membership-gossiping library, based on SWIM/Lifeguard
Asynchronous membership-gossiping library, based on SWIM/Lifeguard.
This crate provides a tokio-based swarm membership library, with gossiping behavior and weak consistency. Its protocol is based on SWIM / Lifeguard, using protobuf and TLS for transport.
extern crate mitch;
extern crate futures;
extern crate tokio;
use futures::prelude::*;
fn main() {
let mut runner = tokio::runtime::Runtime::new().unwrap();
// Start running a swarm, waiting for other peers to reach us.
let cfg = mitch::MitchConfig::default();
let fut_swarm = cfg.build();
let swarm = runner.block_on(fut_swarm).unwrap();
// Snapshot and print swarm members every 5 secs.
let membership = futures::stream::repeat(swarm.membership());
let period = std::time::Duration::from_secs(5);
let fut_snapshot = tokio::timer::Interval::new_interval(period)
.from_err()
.zip(membership)
.and_then(move |(_, mems)| mems.snapshot())
.map_err(|_| ())
.for_each(|mems| Ok(println!(" * Swarm members: {:#?}", mems)));
runner.spawn(fut_snapshot);
// Keep running for 45 secs.
let delay = std::time::Instant::now() + std::time::Duration::from_secs(45);
let fut_stop = swarm.stop();
let fut_delayed_stop = tokio::timer::Delay::new(delay)
.map_err(|e| format!("{}", e).into())
.and_then(|_| fut_stop);
runner.block_on_all(fut_delayed_stop);
}
Some more examples are available under examples.
Licensed under either of
at your option.