Das libp2p-Alphabet von Textile, Teil 2

Übersetzung  eines  Einstiegsartikels im  Textilprojektblog  vom 12. Dezember 2019.





Im  vorherigen Artikel haben  wir mit der Frage begonnen: "Wie gehen Sie mit Ihrer ersten P2P-Anwendung um?" Nach einigem Überlegen kamen wir schnell zu dem Schluss, dass die Entscheidung, sich  nicht auf einen zentralen Server zu verlassen  und sich auf die Erstellung einer Peer- to- Peer- Anwendung  zu konzentrieren, mit einer zusätzlichen Komplexität verbunden war. Die zwei Hauptgruppen von "Problemen" sind der  Anwendungsstatus  und die  Diversität der Infrastrukturprotokolle . Glücklicherweise haben wir festgestellt, dass wir das Rad nicht neu erfinden müssen, indem wir eine Reihe von Infrastrukturproblemen neu lösen. Stattdessen können wir einen großartigen P2P-Netzwerkstapel verwenden: die libp2p-Bibliothek.





Im heutigen Beitrag gehen wir noch einen Schritt weiter und stellen eine "Spielzeug" -Anwendung vor, um ein Gefühl dafür zu bekommen, wie Sie mit libp2p tatsächlich etwas entwickeln können, und Sie hoffentlich zu motivieren, Ihre eigene p2p-Anwendung zu erstellen. Im Ernst, Sie wären überrascht, wie einfach es ist!





Anwendung

Lassen Sie uns gleich eine Reservierung vornehmen. Unser Programm wird jetzt in der Sprache  Go unter Verwendung der  Bibliothek go-libp2p geschrieben . Wenn Sie mit dieser Sprache noch nicht vertraut sind, empfehlen wir Ihnen dringend, sich mit dieser Sprache vertraut zu machen. Es ist wirklich gut für Anwendungen, die sich mit Parallelität und Netzwerken befassen (wie das Behandeln vieler P2P-Verbindungen). Bei den meisten IPFS / libp2p-Bibliotheken sind die Basisimplementierungen in Go geschrieben. Die golang.org Tour ist eine großartige Einführung in Go  .





, - , , . ( , ):





  • TCP-.





  • quic, QUIC, -.





  • mDNS .





  • (, A) sayMyAddr ( ), - .





  • , - «» -. , , Ping, A Pong. !





( p2p-) . , :





  • (TCP, QUIC ..) ?





  • (, mDNS) - , , ?





  • (Streams) ? - , ?





, , , libp2p -   . , !





!

. ,   !  , , . , :









git clone git@github.com:textileio/go-libp2p-primer-article.git
cd go-libp2p-primer-article
code . //   VSCode,    -    ;)
      
      



:  main.go, , libp2p. , . , -quic true, QUIC. ! , : RegisterSayPreferAddr RegisterPingPong. ,  mDNS.





 discovery.go, mDNS. , , mDNS , . -  discovery.Notifee, , mDNS , .  :





  1. - ; -. …





  2. SayPreferAddr, , (addr) -. , …





  3. , PingPong, , ( ).





,  pingpong.go  RegisterPingPong, main.go, :





  • Handler: , PingPong. Handler HTTP REST.  Stream, io.ReadWriteCloser, , - .





  • playPingPong: ;  Stream  PingPong.





, - , . , , . , , ,  saymyaddr.go, pingpong.go.





, , , , , libp2p.





-, : go run * .go , go run * .go -quic . , -quic:





, , , , mDNS . "" -. "" , (- 5- , mDNS) "" , , ,    -.





, PingPong , - (multiaddr), , , QUIC.    -quic , !





, -quic, - , PingPong , QUIC.    -, ,   . , ?





?

. p2p- . PingPong , , - ! , , . pingpong.go:









const (
    protoPingPong = "/pingpong/1.0.0"
)
...
func RegisterPingPong(h host.Host) {
    pp := &pingPong{host: h}
    //     _pingpong_ .
    //  ,   /  ,
    //        ,
    //    , 
    //      .
    //  ,     semver,
    // . : http://bit.ly/2YaJsJr
    h.SetStreamHandler(protoPingPong, pp.Handler)
}
      
      



.





, mDNS. , ?  Kademlia DHT   pubsub - , .





, , .  - , , libp2p .  libp2p!





Libp2p    , p2p-.    - libp2p, , . , .





: , libp2p Go-, go get, , .  Usage readme- go-libp2p.





, , , , p2p- , ! - , ! ,   Slack, p2p-,  Twitter,  Textile. ,   , , P2P!





Ignacio Hagopian





: (StarVer)








All Articles