ceremonyclient/go-libp2p-gostream
2023-10-05 02:05:02 -05:00
..
.github/workflows 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
.gitignore 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
addr.go 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
conn.go 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
go.mod 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
go.sum 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
gostream_test.go 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
gostream.go 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
LICENSE 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
listener.go 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
README.md 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00
version.json 1.1.0 – Ceremony Compressed Sync and Direct Peer Channels 2023-10-05 02:05:02 -05:00

go-libp2p-gostream

Build Status codecov standard-readme compliant

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.