fatedier 0f1005ff61 using glide | 7 năm trước cách đây | |
---|---|---|
.. | ||
.gitignore | 7 năm trước cách đây | |
.travis.yml | 7 năm trước cách đây | |
LICENSE | 7 năm trước cách đây | |
README.md | 7 năm trước cách đây | |
curve.jpg | 7 năm trước cách đây | |
frame.go | 7 năm trước cách đây | |
mux.go | 7 năm trước cách đây | |
mux.jpg | 7 năm trước cách đây | |
mux_test.go | 7 năm trước cách đây | |
session.go | 7 năm trước cách đây | |
session_test.go | 7 năm trước cách đây | |
smux.png | 7 năm trước cách đây | |
stream.go | 7 năm trước cách đây |
Smux ( Simple MUltipleXing) is a multiplexing library for Golang. It relies on an underlying connection to provide reliability and ordering, such as TCP or KCP, and provides stream-oriented multiplexing. The original intention of this library is to power the connection management for kcp-go.
For complete documentation, see the associated Godoc.
VERSION(1B) | CMD(1B) | LENGTH(2B) | STREAMID(4B) | DATA(LENGTH)
The API of smux are mostly taken from yamux
func client() {
// Get a TCP connection
conn, err := net.Dial(...)
if err != nil {
panic(err)
}
// Setup client side of smux
session, err := smux.Client(conn, nil)
if err != nil {
panic(err)
}
// Open a new stream
stream, err := session.OpenStream()
if err != nil {
panic(err)
}
// Stream implements io.ReadWriteCloser
stream.Write([]byte("ping"))
}
func server() {
// Accept a TCP connection
conn, err := listener.Accept()
if err != nil {
panic(err)
}
// Setup server side of smux
session, err := smux.Server(conn, nil)
if err != nil {
panic(err)
}
// Accept a stream
stream, err := session.AcceptStream()
if err != nil {
panic(err)
}
// Listen for a message
buf := make([]byte, 4)
stream.Read(buf)
}
Stable