mirror of
https://github.com/status-im/status-go.git
synced 2025-01-24 13:41:24 +00:00
40359f9c1b
* Adding wakunode module * Adding wakuv2 fleet files * Add waku fleets to update-fleet-config script * Adding config items for waku v2 * Conditionally start waku v2 node depending on config * Adapting common code to use go-waku * Setting log level to info * update dependencies * update fleet config to use WakuNodes instead of BootNodes * send and receive messages * use hash returned when publishing a message * add waku store protocol * trigger signal after receiving store messages * exclude linting rule SA1019 to check deprecated packages
87 lines
1.8 KiB
Markdown
87 lines
1.8 KiB
Markdown
# Yamux
|
|
|
|
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](http://godoc.org/github.com/libp2p/go-yamux).
|
|
|
|
## 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:
|
|
|
|
```go
|
|
|
|
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)
|
|
}
|
|
|
|
```
|
|
|