Total Pageviews

Sunday, 30 July 2017

A QUIC implementation in pure go

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.


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.


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= --port=6121 --v=1
Using Chrome:
/Applications/Google\\ Chrome --user-data-dir=/tmp/chrome --no-proxy-server --enable-quic --host-resolver-rules='MAP'

QUIC without HTTP/2

Take a look at this echo example.

Using the example client

go run example/client/main.go


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.
  Transport: &h2quic.RoundTripper{},


No comments:

Post a Comment

Note: only a member of this blog may post a comment.