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, 会话管理, 内核驱动, 协议实现, 双向流, 安全编程, 带宽优化, 底层网络, 微服务通信, 日志审计, 服务端推送, 流控制, 流量控制, 网络协议, 网络库, 网络通信, 连接多路复用, 长连接, 高并发