2016-09-01 13:14:04 +08:00
2016-08-26 13:30:10 +08:00
upd
2016-08-31 17:39:34 +08:00
2016-08-31 17:57:25 +08:00
upd
2016-08-31 23:29:36 +08:00
2016-08-26 13:30:10 +08:00
2016-09-01 12:58:11 +08:00
2016-09-01 10:09:04 +08:00
2016-09-01 13:14:04 +08:00
2016-09-01 12:58:11 +08:00
2016-09-01 12:58:11 +08:00
2016-09-01 12:36:38 +08:00

simple multiplexing

GoDoc MIT licensed Build Status Go Report Card Coverage Statusd

smux

Introduction

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.

Features

  1. Tiny, less than 500 LOC.
  2. Token controlled receive buffer, which provides smooth bandwidth usage curve.
  3. Receive buffer is own by session and is shared across streams.
  4. Minimized header(8Bytes), maxmized payload.

Documentation

For complete documentation, see the associated Godoc.

Specification

VERSION(1B) | CMD(1B) | LENGTH(2B) | STREAMID(4B) | DATA(LENGTH)  

Usage


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 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 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)
}

Status

Alpha

S
Description
A Stream Multiplexing Library for golang with least memory usage(TDMA)
Readme
669 KiB
Languages
Go 100%