websocket is an external dependency free, pure go implementation of RFC-6455. This project is currently in its alpha stage and the APIs can break in new releases.
websocket requires Go version 1.23 or above.
With Go's module support, go [build|run|test] automatically fetches the necessary dependencies when you add the import in your code:
import "github.com/ajsqr/websocket"
Alternatively, use go get:
go get -u github.com/ajsqr/websocket"
A basic example:
package main
import (
"github.com/ajsqr/websocket"
"github.com/go-chi/chi/v5"
"net/http"
"time"
"fmt"
)
var opener = websocket.WSOpener{
MaxBytes: 20,
}
func hello(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
ws, err := opener.Open(w,r, websocket.TextWebsocket)
if err != nil{
panic(err.Error())
}
// wait for a message from the client
clientHello, err := ws.Receive(ctx)
if err != nil{
panic(err.Error())
}
fmt.Printf("client says : %s", string(clientHello))
for {
err := ws.Send(ctx, []byte("hello"))
if err != nil{
panic(err.Error())
}
time.Sleep(5*time.Second)
}
}
func main() {
router := chi.NewRouter()
router.Get("/", hello)
err := http.ListenAndServe(":8123", router)
if err != nil{
panic(err.Error())
}
}
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.