github.com/hashicorp/yamux源码解析
Evan Phoenix 574fd304fd Merge pull request #80 from hashicorp/f-accept-ctx | 2 年 前 | |
---|---|---|
.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 | 2 年 前 | |
session.go | 2 年 前 | |
session_test.go | 2 年 前 | |
spec.md | 8 年 前 | |
stream.go | 2 年 前 | |
util.go | 5 年 前 | |
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)
}