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 , . :
- ; -. …
SayPreferAddr, , (addr) -. , …
, 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)