Simple websocket library for golang
go get github.com/pkgz/websocket
package main
import (
"context"
"github.com/pkgz/websocket"
"net/http"
)
func main() {
wsServer := websocket.Start(context.Background())
r := http.NewServeMux()
r.HandleFunc("/ws", wsServer.Handler)
wsServer.On("echo", func(c *websocket.Conn, msg *websocket.Message) {
_ = c.Emit("echo", msg.Data)
})
_ = http.ListenAndServe(":8080", r)
}
package main
import (
"context"
"github.com/pkgz/websocket"
"net/http"
)
func main() {
wsServer := websocket.Start(context.Background())
r := http.NewServeMux()
r.HandleFunc("/ws", wsServer.Handler)
ch := wsServer.NewChannel("test")
wsServer.OnConnect(func(c *websocket.Conn) {
ch.Add(c)
ch.Emit("connection", "new connection come")
})
_ = http.ListenAndServe(":8080", r)
}
package main
import (
"context"
"github.com/pkgz/websocket"
"github.com/gobwas/ws"
"net/http"
)
func main () {
r := http.NewServeMux()
wsServer := websocket.Start(context.Background())
r.HandleFunc("/ws", wsServer.Handler)
wsServer.OnMessage(func(c *websocket.Conn, h ws.Header, b []byte) {
c.Send("Hello World")
})
http.ListenAndServe(":8080", r)
}
All tests was runned by Autobahn WebSocket Testsuite v0.8.0/v0.10.9. Results:
Code | Name | Status |
---|---|---|
1 | Framing | Pass |
2 | Pings/Pongs | Pass |
3 | Reserved Bits | Pass |
4 | Opcodes | Pass |
5 | Fragmentation | Pass |
6 | UTF-8 Handling | Pass |
7 | Close Handling | Pass |
9 | Limits/Performance | Pass |
10 | Misc | Pass |
12 | WebSocket Compression (different payloads) | Unimplemented |
13 | WebSocket Compression (different parameters) | Unimplemented |