hashicorp/yamux
GitHub: hashicorp/yamux
基于 Go 的 TCP/Unix 套接字多路复用库,在单一连接上实现数千个双向逻辑流。
Stars: 2517 | Forks: 254
# Yamux
Yamux (Yet another Multiplexer) 是一个 Golang 的多路复用库。
它依赖于底层连接来提供可靠性和排序,例如 TCP 或 Unix 域套接字,并提供面向流的多路复用。它受 SPDY 启发,但与其不兼容。
Yamux 的特性包括:
* 双向流
* 客户端或服务端均可打开流
* 适用于 NAT 穿透
* 服务端推送支持
* 流控制
* 避免饥饿
* 背压机制以防止接收方过载
* 保持活跃 (Keep Alives)
* 支持通过负载均衡器的持久连接
* 高效
* 支持以低开销实现数千个逻辑流
## 文档
完整文档请参阅相关的 [Godoc](http://godoc.org/github.com/hashicorp/yamux)。
## 规范
Yamux 的完整规范在 `spec.md` 文件中提供。
它可以作为实现互操作库的开发者的指南。
## 用法
使用 Yamux 非常简单:
```
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)
}
```
标签:Channel, EVTX分析, EVTX分析, Golang, HashiCorp, IP 地址批量处理, MacOS取证, NAT穿透, Socket编程, SPDY, TCP, Unix域套接字, Yamux, 会话管理, 内核驱动, 协议实现, 双向流, 安全编程, 带宽优化, 底层网络, 微服务通信, 日志审计, 服务端推送, 流控制, 流量控制, 网络协议, 网络库, 网络通信, 连接多路复用, 长连接, 高并发