js-libp2p icon indicating copy to clipboard operation
js-libp2p copied to clipboard

Rendezvous Protocol

Open vasco-santos opened this issue 5 years ago • 1 comments

Rendezvous Spec

Background

Libp2p rendezvous is a lightweight mechanism for generalized peer discovery. It can be used for bootstrap purposes, real time peer discovery, application specific routing, and so on. Any node implementing the rendezvous protocol can act as a rendezvous point, allowing the discovery of relevant peers in a decentralized fashion.

Motivation

Over the last few years, libp2p has provided libp2p/js-libp2p-webrtc-star and libp2p/js-libp2p-websocket-star to enable browser nodes to discover each others in the network and be able to connect. These were never designed to be long term solutions, but to be quick tools for demos. In addition, they re-implement a lot of what libp2p can do, such as connection authentication, peer-discovery, circuit-relay and rendezvous.

The rendezvous protocol is the missing piece in the js-libp2p for enabling full connectivity between browser nodes, as well as other constrained environments, without the need for these *-star transports.

Benefits:

  • By cutting of the *-star transports, we would be saving the time from reinventing the wheel and also reduce the confusion from the users.
  • Any IPFS/libp2p node could then be the rendezvous or the relaying address (meaning that we can use the go-libp2p to handle with even more clients).
    • We avoid spending time creating custom instrumentation and use instead the instrumentation that IPFS & libp2p have.
    • Any security, perf improvement or memory leak fix will be directly on libp2p and/or IPFS rather than external "temporary" code.
  • People would not have to rely on a centralized of custom built infrastructure, instead, they could use it with any IPFS/libp2p node.

References:

Milestones

The rendezvous implementation is part of libp2p/js-libp2p#385, where we aim to sunset the *-star protocols. This implementation solves most of what we need to finally sunset all these protocols except for webrtc-star. However, this work is also the groundwork to also support webrtc distributed signalling, so that we can sunset the *-star protocols.

Task Issue PR
1) Rendezvous Implementation N/A libp2p/js-libp2p-rendezvous#6
2) Rendezvous client in js-libp2p N/A libp2p/js-libp2p#856
3) Rendezvous IPFS/libp2p browser example N/A libp2p/js-libp2p#862
4) Deploy a set of libp2p rendezvous nodes N/A TODO
5) Rendezvous used by default in js-ipfs N/A TODO
6) IPFS/libp2p browser guide blogpost TODO TODO

vasco-santos avatar Jun 02 '20 10:06 vasco-santos

This was delayed for 0.30 release so that we can cut out 0.29 sooner

vasco-santos avatar Aug 21 '20 15:08 vasco-santos

This was delayed for 0.30 release so that we can cut out 0.29 sooner

so given this seems to be actually implemented since about 2-4 years ago (judging by various open, conflicting, PRs in various repos), and was supposed to be in 0.29, then 0.30 and then apparently 0.32, which ALSO is closed now (2 years after you last mentioned it), can we expect js-libp2p to actually...yknow...do working networking within this decade?

nonchip avatar Dec 30 '22 11:12 nonchip

@nonchip I responded to your other comment here https://github.com/libp2p/js-libp2p-rendezvous/pull/6#issuecomment-1411284977 We probably won't work to support rendezvous anytime soon. If you want solutions for browser connectivity with js-libp2p, know that we have a browser to server solution in WebTransport and WebRTC as well as a WebRTC browser-to-browser solution coming in soon.

p-shahi avatar Feb 01 '23 00:02 p-shahi