Files
quic-go/README.md
2016-06-07 00:11:39 +07:00

2.2 KiB

A QUIC server implementation in pure Go

Build Status Code Coverage Godoc Reference

quic-go is an implementation of the QUIC protocol in Go. While we're not far from being feature complete, there's still a lot of work to do regarding performance and security. At the moment, we do not recommend use in production systems. We appreciate any feedback :)

Roadmap

Done:

  • Basic protocol with support for QUIC version 30-33
  • HTTP/2 support
  • Crypto (RSA / ECDSA certificates, curve25519 for key exchange, chacha20-poly1305 as cipher)
  • Loss detection and retransmission (currently fast retransmission & RTO)
  • Flow Control
  • Congestion control using cubic

Major TODOs:

  • Security, especially DOS protections
  • Performance
  • Better packet loss detection
  • Support for QUIC version 34
  • Connection migration
  • QUIC client
  • Public API design
  • Integration into caddy (mostly to figure out the right server API)

Guides

Installing deps:

go get -t

Running tests:

go test ./...

Running the example server:

go run example/main.go -www /var/www/

Using the quic_client from chromium:

quic_client --quic-version=32 --host=127.0.0.1 --port=6121 --v=1 https://quic.clemente.io

Using Chrome:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=/tmp/chrome --no-proxy-server --enable-quic --origin-to-force-quic-on=quic.clemente.io:443 --host-resolver-rules='MAP quic.clemente.io:443 127.0.0.1:6121' https://quic.clemente.io

Usage

See the example server or our fork of caddy. Starting a QUIC server is very similar to the standard lib http in go:

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