This repository is for demo how to use library coder-websocket to handle websocket protocol in golang
go get github.com/coder/websocket
package echo
import (
"log"
"net/http"
"github.com/coder/websocket"
)
type Handler struct{}
// SetupRoute - 設定 route
func (h *Handler) SetupRoute(router *http.ServeMux) {
// 設定 websocket 處理
router.HandleFunc("/ws", h.Echo)
}
func NewRoute() *Handler {
return &Handler{}
}
func (h *Handler) Echo(w http.ResponseWriter, r *http.Request) {
conn, err := websocket.Accept(w, r, &websocket.AcceptOptions{
InsecureSkipVerify: true, // Disable origin verification
})
if err != nil {
log.Println("Failed to accept connection:", err)
return
}
defer conn.Close(websocket.StatusNormalClosure, "")
// setup listen websocket event loop
for {
msgType, data, err := conn.Read(r.Context())
if websocket.CloseStatus(err) != -1 {
log.Println("Connection closed:", err)
return
}
if err != nil {
log.Println("Read error:", err)
return
}
log.Printf("Received: %s\n", data)
err = conn.Write(r.Context(), msgType, data)
if err != nil {
log.Println("Write error:", err)
return
}
}
}