L'alphabet libp2p du textile, partie 2

Traduction  d'un article d'  entrée de gamme sur le blog  du projet  Textile du 12 décembre 2019.





Dans l'  article précédent,  nous avons commencé par la question: "Comment abordez-vous votre première application p2p?" Après réflexion, nous avons rapidement conclu que la décision de  ne pas compter sur un serveur centralisé  et de se concentrer sur la création d'une application peer- to- peer s'accompagnait  d'une complexité supplémentaire. Les deux principaux groupes de «problèmes» sont l'  état de l'application  et  la diversité des protocoles d'infrastructure . Heureusement, nous avons constaté que nous n'avons pas à réinventer la roue en résolvant un tas de problèmes d'infrastructure - à la place, nous pouvons utiliser une excellente pile de réseau p2p: la bibliothèque libp2p.





Dans l'article d'aujourd'hui, nous irons un peu plus loin et présenterons une application "jouet" pour avoir une idée de la façon dont vous pouvez réellement développer quelque chose avec libp2p, et nous espérons vous motiver à créer votre propre application p2p. Sérieusement, vous seriez surpris de voir à quel point c'est facile!





application

Faisons une réservation tout de suite , notre programme sera maintenant écrit dans le langage  Go , en utilisant la  bibliothèque go-libp2p . Si vous n'êtes pas encore familiarisé avec cette langue, nous vous recommandons vivement de vous familiariser. C'est vraiment bon pour les applications traitant de la concurrence et du réseautage (comme la gestion de nombreuses connexions p2p). La plupart des bibliothèques IPFS / libp2p ont leurs implémentations de base écrites en Go. La visite golang.org est une excellente introduction à 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