github.com/hashicorp/yamux源码解析
Alex Dadgar 32023dc2ac Rework some comments | преди 3 години | |
---|---|---|
.gitignore | преди 10 години | |
LICENSE | преди 10 години | |
README.md | преди 10 години | |
addr.go | преди 6 години | |
bench_test.go | преди 6 години | |
const.go | преди 3 години | |
const_test.go | преди 10 години | |
go.mod | преди 3 години | |
mux.go | преди 3 години | |
session.go | преди 6 години | |
session_test.go | преди 3 години | |
spec.md | преди 8 години | |
stream.go | преди 3 години | |
util.go | преди 6 години | |
util_test.go | преди 10 години |
Yamux (Yet another Multiplexer) is a multiplexing library for Golang. It relies on an underlying connection to provide reliability and ordering, such as TCP or Unix domain sockets, and provides stream-oriented multiplexing. It is inspired by SPDY but is not interoperable with it.
Yamux features include:
For complete documentation, see the associated Godoc.
The full specification for Yamux is provided in the spec.md
file.
It can be used as a guide to implementors of interoperable libraries.
Using Yamux is remarkably simple:
func client() {
// Get a TCP connection
conn, err := net.Dial(...)
if err != nil {
panic(err)
}
// Setup client side of yamux
session, err := yamux.Client(conn, nil)
if err != nil {
panic(err)
}
// Open a new stream
stream, err := session.Open()
if err != nil {
panic(err)
}
// Stream implements net.Conn
stream.Write([]byte("ping"))
}
func server() {
// Accept a TCP connection
conn, err := listener.Accept()
if err != nil {
panic(err)
}
// Setup server side of yamux
session, err := yamux.Server(conn, nil)
if err != nil {
panic(err)
}
// Accept a stream
stream, err := session.Accept()
if err != nil {
panic(err)
}
// Listen for a message
buf := make([]byte, 4)
stream.Read(buf)
}