.. | ||
.github/workflows | ||
.gitignore | ||
addr.go | ||
conn.go | ||
go.mod | ||
go.sum | ||
gostream_test.go | ||
gostream.go | ||
LICENSE | ||
listener.go | ||
README.md | ||
version.json |
go-libp2p-gostream
Go "net" wrappers for libp2p
Package gostream
allows to replace the standard net stack in Go with
LibP2P streams.
Given a libp2p.Host, gostream
provides Dial() and Listen() methods which
return implementations of net.Conn and net.Listener.
Instead of the regular "host:port" addressing, gostream
uses a Peer ID, and
rather than a raw TCP connection, gostream will use libp2p's net.Stream. This
means your connections will take advantage of libp2p's multi-routes, NAT
traversal, and stream multiplexing.
Table of Contents
Install
This package is a library that uses Go modules for depedency management.
Usage
Documentation can be read at Godoc. The important bits follow.
A simple communication between peers -one acting as server and the other as client- would work like:
go func() {
listener, _ := Listen(srvHost, tag)
defer listener.Close()
servConn, _ := listener.Accept()
defer servConn.Close()
reader := bufio.NewReader(servConn)
msg, _ := reader.ReadString('\n')
fmt.Println(msg)
servConn.Write([]byte("answer!\n"))
}()
clientConn, _ := Dial(context.Background(), clientHost, srvHost.ID(), tag)
clientConn.Write([]byte("question?\n"))
resp, _ := ioutil.ReadAll(clientConn)
fmt.Println(resp)
Note error handling above is ommited.
Contribute
PRs accepted.
License
MIT © Protocol Labs, Inc.