websocket
websocket is a minimal and idiomatic WebSocket library for Go.
Install
go get nhooyr.io/websocket
Highlights
Roadmap
Examples
For a production quality example that demonstrates the complete API, see the
echo example.
For a full stack example, see the chat example.
Server
http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
c, err := websocket.Accept(w, r, nil)
if err != nil {
}
defer c.Close(websocket.StatusInternalError, "the sky is falling")
ctx, cancel := context.WithTimeout(r.Context(), time.Second*10)
defer cancel()
var v interface{}
err = wsjson.Read(ctx, c, &v)
if err != nil {
}
log.Printf("received: %v", v)
c.Close(websocket.StatusNormalClosure, "")
})
Client
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
c, _, err := websocket.Dial(ctx, "ws://localhost:8080", nil)
if err != nil {
}
defer c.Close(websocket.StatusInternalError, "the sky is falling")
err = wsjson.Write(ctx, c, "hi")
if err != nil {
}
c.Close(websocket.StatusNormalClosure, "")
Comparison
gorilla/websocket
Advantages of gorilla/websocket:
Advantages of nhooyr.io/websocket:
golang.org/x/net/websocket
golang.org/x/net/websocket is deprecated.
See golang/go/issues/18152.
The net.Conn can help in transitioning
to nhooyr.io/websocket.
gobwas/ws
gobwas/ws has an extremely flexible API that allows it to be used
in an event driven style for performance. See the author's blog post.
However when writing idiomatic Go, nhooyr.io/websocket will be faster and easier to use.