You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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:
Bi-directional streams
Streams can be opened by either client or server
Useful for NAT traversal
Server-side push support
Flow control
Avoid starvation
Back-pressure to prevent overwhelming a receiver
Keep Alives
Enables persistent connections over a load balancer
Efficient
Enables thousands of logical streams with low overhead
Documentation
For complete documentation, see the associated Godoc.
Specification
The full specification for Yamux is provided in the spec.md file.
It can be used as a guide to implementors of interoperable libraries.
Usage
Using Yamux is remarkably simple:
funcclient() {
// Get a TCP connectionconn, err:= net.Dial(...)
iferr!=nil {
panic(err)
}
// Setup client side of yamuxsession, err:=yamux.Client(conn, nil)
iferr!=nil {
panic(err)
}
// Open a new streamstream, err:=session.Open()
iferr!=nil {
panic(err)
}
// Stream implements net.Connstream.Write([]byte("ping"))
}
funcserver() {
// Accept a TCP connectionconn, err:=listener.Accept()
iferr!=nil {
panic(err)
}
// Setup server side of yamuxsession, err:=yamux.Server(conn, nil)
iferr!=nil {
panic(err)
}
// Accept a streamstream, err:=session.Accept()
iferr!=nil {
panic(err)
}
// Listen for a messagebuf:=make([]byte, 4)
stream.Read(buf)
}