github.com/psiphon-Labs/psiphon-tunnel-core@v2.0.28+incompatible/psiphon/common/quic/gquic-go/README.md (about)

     1  # A QUIC implementation in pure Go
     2  
     3  <img src="docs/quic.png" width=303 height=124>
     4  
     5  [![Godoc Reference](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](https://godoc.org/github.com/lucas-clemente/quic-go)
     6  [![Travis Build Status](https://img.shields.io/travis/lucas-clemente/quic-go/master.svg?style=flat-square&label=Travis+build)](https://travis-ci.org/lucas-clemente/quic-go)
     7  [![CircleCI Build Status](https://img.shields.io/circleci/project/github/lucas-clemente/quic-go.svg?style=flat-square&label=CircleCI+build)](https://circleci.com/gh/lucas-clemente/quic-go)
     8  [![Windows Build Status](https://img.shields.io/appveyor/ci/lucas-clemente/quic-go/master.svg?style=flat-square&label=windows+build)](https://ci.appveyor.com/project/lucas-clemente/quic-go/branch/master)
     9  [![Code Coverage](https://img.shields.io/codecov/c/github/lucas-clemente/quic-go/master.svg?style=flat-square)](https://codecov.io/gh/lucas-clemente/quic-go/)
    10  
    11  quic-go is an implementation of the [QUIC](https://en.wikipedia.org/wiki/QUIC) protocol in Go.
    12  
    13  ## Roadmap
    14  
    15  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.
    16  As Google's QUIC versions are expected to converge towards the [IETF QUIC draft](https://github.com/quicwg/base-drafts), quic-go will eventually implement that draft.
    17  
    18  ## Guides
    19  
    20  We currently support Go 1.9+.
    21  
    22  Installing and updating dependencies:
    23  
    24      go get -t -u ./...
    25  
    26  Running tests:
    27  
    28      go test ./...
    29  
    30  ### Running the example server
    31  
    32      go run example/main.go -www /var/www/
    33  
    34  Using the `quic_client` from chromium:
    35  
    36      quic_client --host=127.0.0.1 --port=6121 --v=1 https://quic.clemente.io
    37  
    38  Using Chrome:
    39  
    40      /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
    41  
    42  ### QUIC without HTTP/2
    43  
    44  Take a look at [this echo example](example/echo/echo.go).
    45  
    46  ### Using the example client
    47  
    48      go run example/client/main.go https://clemente.io
    49  
    50  ## Usage
    51  
    52  ### As a server
    53  
    54  See the [example server](example/main.go) or try out [Caddy](https://github.com/mholt/caddy) (from version 0.9, [instructions here](https://github.com/mholt/caddy/wiki/QUIC)). Starting a QUIC server is very similar to the standard lib http in go:
    55  
    56  ```go
    57  http.Handle("/", http.FileServer(http.Dir(wwwDir)))
    58  h2quic.ListenAndServeQUIC("localhost:4242", "/path/to/cert/chain.pem", "/path/to/privkey.pem", nil)
    59  ```
    60  
    61  ### As a client
    62  
    63  See the [example client](example/client/main.go). Use a `h2quic.RoundTripper` as a `Transport` in a `http.Client`.
    64  
    65  ```go
    66  http.Client{
    67    Transport: &h2quic.RoundTripper{},
    68  }
    69  ```
    70  
    71  ## Contributing
    72  
    73  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](https://github.com/lucas-clemente/quic-go/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22). If you have any questions, please feel free to reach out by opening an issue or leaving a comment.