ba1ba1ac02
* chore: use go 1.19 and bump go-libp2p * chore: bump golangci-lint * chore: update go version in shell.nix |
||
---|---|---|
.. | ||
.gitignore | ||
LICENSE | ||
README.md | ||
client.go | ||
codecov.yml | ||
errors.go | ||
protocol.go | ||
server.go | ||
session.go | ||
session_manager.go | ||
stream.go | ||
streams_map.go | ||
version.json |
README.md
webtransport-go
webtransport-go is an implementation of the WebTransport protocol, based on quic-go. It currently implements draft-02 of the specification.
Running a Server
// create a new webtransport.Server, listening on (UDP) port 443
s := webtransport.Server{
H3: http3.Server{Addr: ":443"},
}
// Create a new HTTP endpoint /webtransport.
http.HandleFunc("/webtransport", func(w http.ResponseWriter, r *http.Request) {
conn, err := s.Upgrade(w, r)
if err != nil {
log.Printf("upgrading failed: %s", err)
w.WriteHeader(500)
return
}
// Handle the connection. Here goes the application logic.
})
s.ListenAndServeTLS(certFile, keyFile)
Now that the server is running, Chrome can be used to establish a new WebTransport session as described in this tutorial.
Running a Client
var d webtransport.Dialer
rsp, conn, err := d.Dial(ctx, "https://example.com/webtransport", nil)
// err is only nil if rsp.StatusCode is a 2xx
// Handle the connection. Here goes the application logic.