golang

module
v0.0.0-...-475935a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 21, 2021 License: MIT

README

qmux for Go

An implementation of qmux for multiplexing any reliable io.ReadWriteCloser.

Using qmux in Go

go get github.com/progrium/qmux/golang

You can create a qmux session from any io.ReadWriteCloser with session.New:

package main

import (
    "net"
    "io"
    "context"

    "github.com/progrium/qmux/golang/session"
)

func main() {
    conn, err := net.Dial("tcp", "localhost:9999")
    if err != nil {
        panic(err)
    }
    
    sess := session.New(conn)
    defer sess.Close() // closes underlying conn
    
    ch, err := sess.Open(context.Background())
    if err != nil {
        panic(err)
    }
    defer ch.Close()

    io.WriteString(ch, "Hello world\n")
}

However it can be convenient to use the builtin transport dialers and listeners.

package main

import (
    "io/ioutil"

    "github.com/progrium/qmux/golang/transport"
)

func main() {
    t, err := transport.ListenTCP("localhost:9999")
    if err != nil {
        panic(err)
    }
    defer t.Close()
    
    sess, err := t.Accept()
    if err != nil {
        panic(err)
    }
    defer sess.Close()
    
    ch, err := sess.Accept()
    if err != nil {
        panic(err)
    }
    defer ch.Close()
    
    b, err := ioutil.ReadAll(ch)
    if err != nil {
        panic(err)
    }
    os.Stdout.Write(b) // "Hello world\n" if connected with earlier program
}

Directories

Path Synopsis
Package codec implements encoding and decoding of qmux messages.
Package codec implements encoding and decoding of qmux messages.
Package mux provides a generic muxing API.
Package mux provides a generic muxing API.
Package session implements a qmux session and channel API.
Package session implements a qmux session and channel API.
Package transport provides several dialers and listeners for getting qmux sessions over TCP, Unix sockets, WebSocket, and stdio.
Package transport provides several dialers and listeners for getting qmux sessions over TCP, Unix sockets, WebSocket, and stdio.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL