You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
rui.zheng 151a2f902b add QUIC support 9 years ago
..
ackhandler add QUIC support 9 years ago
congestion add QUIC support 9 years ago
crypto add QUIC support 9 years ago
flowcontrol add QUIC support 9 years ago
frames add QUIC support 9 years ago
h2quic add QUIC support 9 years ago
handshake add QUIC support 9 years ago
internal/utils add QUIC support 9 years ago
protocol add QUIC support 9 years ago
qerr add QUIC support 9 years ago
Changelog.md add QUIC support 9 years ago
LICENSE Move vendor directory at top level 9 years ago
README.md add QUIC support 9 years ago
appveyor.yml add QUIC support 9 years ago
buffer_pool.go add QUIC support 9 years ago
client.go add QUIC support 9 years ago
codecov.yml add QUIC support 9 years ago
conn.go add QUIC support 9 years ago
interface.go add QUIC support 9 years ago
packet_number_generator.go Move vendor directory at top level 9 years ago
packet_packer.go add QUIC support 9 years ago
packet_unpacker.go add QUIC support 9 years ago
public_header.go add QUIC support 9 years ago
public_reset.go add QUIC support 9 years ago
server.go add QUIC support 9 years ago
session.go add QUIC support 9 years ago
stream.go add QUIC support 9 years ago
stream_frame_sorter.go add QUIC support 9 years ago
stream_framer.go add QUIC support 9 years ago
streams_map.go add QUIC support 9 years ago

README.md

A QUIC implementation in pure Go

Godoc Reference Linux Build Status Windows Build Status Code Coverage

quic-go is an implementation of the QUIC protocol in Go.

Roadmap

quic-go is compatible with the current version(s) of Google Chrome and QUIC as deployed on Google's servers. We're actively tracking the development of the Chrome code to ensure compatibility as the protocol evolves. In that process, we're dropping support for old QUIC versions. As Google's QUIC versions are expected to converge towards the IETF QUIC draft, quic-go will eventually implement that draft.

Guides

We currently support Go 1.8+.

Installing and updating dependencies:

go get -t -u ./...

Running tests:

go test ./...

Running the example server

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

Using the quic_client from chromium:

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

QUIC without HTTP/2

Take a look at this echo example.

Using the example client

go run example/client/main.go https://clemente.io

Usage

As a server

See the example server or try out Caddy (from version 0.9, instructions here). 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)

As a client

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

http.Client{
  Transport: &h2quic.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 want-help. If you have any questions, please feel free to reach out by opening an issue or leaving a comment.