Alfabeto libp2p de textiles, parte 2

Traducción  de un  artículo de nivel de entrada en el blog  del proyecto  Textile del 12 de diciembre de 2019.





En el  artículo anterior,  comenzamos con la pregunta: "¿Cómo aborda su primera aplicación p2p?" Después de pensarlo un poco, rápidamente llegamos a la conclusión de que la decisión de  no depender de un servidor centralizado  y centrarse en hacer una aplicación de igualigual conllevaba una gran complejidad adicional. Los dos grupos principales de "problemas" son el  estado de la aplicación  y  la diversidad de protocolos de infraestructura . Afortunadamente, hemos descubierto que no tenemos que reinventar la rueda resolviendo un montón de problemas de infraestructura; en cambio, podemos usar una gran pila de redes p2p: la biblioteca libp2p.





En la publicación de hoy, iremos un poco más allá y presentaremos una aplicación de "juguete" para tener una idea de cómo se puede desarrollar algo con libp2p y, con suerte, motivarlo a crear su propia aplicación p2p. En serio, ¡te sorprendería lo fácil que es!





solicitud

Hagamos una reserva de inmediato , nuestro programa ahora estará escrito en el lenguaje  Go , usando la  biblioteca go-libp2p . Si aún no está familiarizado con este idioma, le recomendamos encarecidamente que se familiarice. Es realmente bueno para aplicaciones que se ocupan de la concurrencia y las redes (como manejar muchas conexiones p2p). La mayoría de las bibliotecas IPFS / libp2p tienen sus implementaciones base escritas en Go. El recorrido de golang.org es una excelente introducción a Go  .





Por lo tanto, nuestro programa será una simple aplicación de ping-pong con algunos ajustes adicionales para que sea más interesante que los ejemplos habituales sin arte. Estas son algunas de las características de nuestra aplicación (no se preocupe, las cubriremos con más detalle más adelante):





  • De forma predeterminada, la aplicación se aferra a un puerto TCP libre.





  • Si se especifica la bandera quic, también se conectará a un puerto de escucha QUIC, que se convertirá en la dirección de host preferida para jugar ping-pong.





  • El host utilizará el servicio mDNS para descubrir nuevos hosts en la red local.





  • En cada nodo recién descubierto (digamos, nodo A), nuestra aplicación ejecutará su propio protocolo sayMyAddr (lo implementaremos), que nos aprenderá la dirección preferida para jugar ping-pong para este nodo.





  • , - «» -. , , 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