Skip to content

gouravvemula0/websocket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

dfb8f38 · Nov 26, 2021

History

5 Commits
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 26, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 26, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021
Nov 25, 2021

Repository files navigation

websocket

godoc coverage

websocket is a minimal and idiomatic WebSocket library for Go.

Install

go get github.com/gouravvemula0/webso

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.