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
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.