Terjemahan artikel tingkat awal di blog proyek Tekstil mulai 12 Desember 2019.
Pada artikel sebelumnya, kita mulai dengan pertanyaan: "Bagaimana pendekatan Anda terhadap aplikasi p2p pertama Anda?" Setelah beberapa pemikiran, kami dengan cepat menyimpulkan bahwa keputusan untuk tidak bergantung pada server terpusat dan fokus pada pembuatan aplikasi peer- to- peer datang dengan banyak kerumitan tambahan. Dua kelompok utama dari "masalah" adalah status aplikasi dan keragaman protokol infrastruktur . Untungnya, kami telah menemukan bahwa kami tidak perlu menemukan kembali roda dengan memecahkan banyak masalah infrastruktur - sebagai gantinya, kami dapat menggunakan tumpukan jaringan p2p yang bagus: perpustakaan libp2p.
Dalam posting hari ini, kita akan melangkah lebih jauh dan memperkenalkan aplikasi "mainan" untuk merasakan bagaimana Anda benar-benar dapat mengembangkan sesuatu dengan libp2p, dan semoga memotivasi Anda untuk membuat aplikasi p2p Anda sendiri. Serius, Anda akan terkejut betapa mudahnya itu!
aplikasi
Ayo buat reservasi sekarang juga, program kita sekarang akan ditulis dalam bahasa Go , menggunakan pustaka go-libp2p . Jika Anda belum terbiasa dengan bahasa ini, kami sangat menyarankan Anda untuk membiasakan diri. Ini sangat bagus untuk aplikasi yang berurusan dengan konkurensi dan jaringan (seperti menangani banyak koneksi p2p). Sebagian besar pustaka IPFS / libp2p memiliki implementasi dasarnya yang ditulis dalam Go. Tur golang.org adalah pengantar yang bagus untuk Go .
Jadi, program kami akan menjadi aplikasi ping-pong sederhana dengan beberapa penyesuaian tambahan untuk membuatnya lebih menarik daripada contoh tanpa seni biasa. Berikut adalah beberapa fitur aplikasi kami (jangan khawatir, kami akan membahasnya lebih detail nanti):
Secara default, aplikasi menempel pada port TCP gratis.
Jika flag quic ditentukan, itu juga akan terhubung ke port mendengarkan QUIC, yang akan menjadi alamat host pilihan untuk bermain ping-pong.
Host akan menggunakan layanan mDNS untuk menemukan host baru di jaringan lokal.
Pada setiap node yang baru ditemukan (katakanlah, node A), aplikasi kami akan menjalankan protokol sayMyAddr-nya sendiri (kami akan menerapkannya), yang akan mempelajari kami alamat pilihan untuk bermain ping-pong untuk node ini.
, - «» -. , , 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!
: (StarVer)