Skip to content

Minimal and idiomatic WebSocket library for Go

License

Notifications You must be signed in to change notification settings

coder/websocket

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

283ee56 · Jul 4, 2020
May 10, 2020
Jul 4, 2020
May 10, 2020
Apr 14, 2020
May 5, 2020
Feb 16, 2020
Feb 13, 2020
May 30, 2019
May 18, 2020
May 18, 2020
May 18, 2020
May 18, 2020
May 18, 2020
Feb 13, 2020
May 18, 2020
Feb 13, 2020
May 18, 2020
May 18, 2020
May 18, 2020
Feb 16, 2020
Feb 16, 2020
May 18, 2020
Feb 16, 2020
Feb 16, 2020
Feb 16, 2020
May 18, 2020
May 18, 2020
May 18, 2020
Apr 14, 2020
Nov 29, 2019
Jul 4, 2020
May 18, 2020
Feb 13, 2020

Repository files navigation

websocket

godoc coverage

websocket is a minimal and idiomatic WebSocket library for Go.

Install

go get nhooyr.io/websocket

Highlights

Roadmap

  • HTTP/2 #4

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.