non-one / quic-go-fec

QUIC - FEC Implementation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

rQUIC

An experimental version of QUIC enhanced with FEC.

FEC (Forward Error Correction) makes a communication more robust (robust QUIC -> rQUIC) by sending redundant information, from which the lost one can be recovered before it is retransmitted. FEC significantly reduces latency, especially in shared access media, such as WiFi.

This project started as a collaboration between University of Cantabria and Simula Research Laboratory. Since then more institutions have been involved: Ikerlan Technology Research Centre and University of Oslo.

The code on this branch is under development. If you want to see the code used for IFIP Networking 2019 and IEEE GLOBECOM 2019 papers, you should check globecom19-quic-fec branch.

A QUIC implementation in pure Go

Godoc Reference Travis Build Status CircleCI Build Status Windows Build Status Code Coverage

quic-go is an implementation of the QUIC protocol in Go. It implements the IETF QUIC draft-29.

Version compatibility

Since quic-go is under active development, there's no guarantee that two builds of different commits are interoperable. The QUIC version used in the master branch is just a placeholder, and should not be considered stable.

If you want to use quic-go as a library in other projects, please consider using a tagged release. These releases expose experimental QUIC versions, which are guaranteed to be stable.

Guides

We currently support Go 1.14+, with Go modules support enabled.

Running tests:

go test ./...

QUIC without HTTP/3

Take a look at this echo example.

Usage

As a server

See the example server. Starting a QUIC server is very similar to the standard lib http in go:

http.Handle("/", http.FileServer(http.Dir(wwwDir)))
http3.ListenAndServeQUIC("localhost:4242", "/path/to/cert/chain.pem", "/path/to/privkey.pem", nil)

As a client

See the example client. Use a http3.RoundTripper as a Transport in a http.Client.

http.Client{
  Transport: &http3.RoundTripper{},
}

Contributing

We are always happy to welcome new contributors! We have a number of self-contained issues that are suitable for first-time contributors, they are tagged with help wanted. If you have any questions, please feel free to reach out by opening an issue or leaving a comment.

About

QUIC - FEC Implementation

License:MIT License


Languages

Language:Go 99.6%Language:Shell 0.3%Language:Dockerfile 0.1%