- Notifications
You must be signed in to change notification settings - Fork241
Golang connection multiplexing library
License
NotificationsYou must be signed in to change notification settings
hashicorp/yamux
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Yamux (Yet another Multiplexer) is a multiplexing library for Golang.It relies on an underlying connection to provide reliabilityand ordering, such as TCP or Unix domain sockets, and providesstream-oriented multiplexing. It is inspired by SPDY but is notinteroperable 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
For complete documentation, see the associatedGodoc.
The full specification for Yamux is provided in thespec.md
file.It can be used as a guide to implementors of interoperable libraries.
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)}
About
Golang connection multiplexing library
Resources
License
Code of conduct
Security policy
Stars
Watchers
Forks
Packages0
No packages published