Max Inden 40c5335e3b
core/: Concurrent dial attempts (#2248)
Concurrently dial address candidates within a single dial attempt.

Main motivation for this feature is to increase success rate on hole punching
(see https://github.com/libp2p/rust-libp2p/issues/1896#issuecomment-885894496
for details). Though, as a nice side effect, as one would expect, it does
improve connection establishment time.

Cleanups and fixes done along the way:

- Merge `pool.rs` and `manager.rs`.

- Instead of manually implementing state machines in `task.rs` use
  `async/await`.

- Fix bug where `NetworkBehaviour::inject_connection_closed` is called without a
  previous `NetworkBehaviour::inject_connection_established` (see
  https://github.com/libp2p/rust-libp2p/issues/2242).

- Return handler to behaviour on incoming connection limit error. Missed in
  https://github.com/libp2p/rust-libp2p/issues/2242.
2021-10-14 18:05:07 +02:00
..
2021-08-11 13:12:12 +02:00

Examples

A set of examples showcasing how to use rust-libp2p.

Getting started

  • Ping

    Small ping clone, sending a ping to a peer, expecting a pong as a response. See tutorial for a step-by-step guide building the example.

Individual libp2p protocols

  • Chat

    A basic chat application demonstrating libp2p and the mDNS and floodsub protocols.

    • Gossipsub chat

      Same as the chat example but using the Gossipsub protocol.

    • Tokio based chat

      Same as the chat example but using tokio for all asynchronous tasks and I/O.

  • Distributed key-value store

    A basic key value store demonstrating libp2p and the mDNS and Kademlia protocol.

  • IPFS Kademlia

    Demonstrates how to perform Kademlia queries on the IPFS network.

  • IPFS Private

    Implementation using the gossipsub, ping and identify protocols to implement the ipfs private swarms feature.

  • Passive Discovery via MDNS

    Discover peers on the same network via the MDNS protocol.

Integration into a larger application

  • File sharing application

    Basic file sharing application with peers either providing or locating and getting files by name.

    While obviously showcasing how to build a basic file sharing application with the Kademlia and Request-Response protocol, the actual goal of this example is to show how to integrate rust-libp2p into a larger application.