You can integrate nbio's WebSocket implementation into a standard Go net/http server using the websocket.Upgrader. This allows you to use the high-performance NBIO WebSocket handling within a traditional HTTP server architecture.
To implement this, you must:
- Create a
websocket.Upgrader using websocket.NewUpgrader(). - Define event handlers for
OnOpen, OnMessage, and OnClose. - Call
upgrader.Upgrade(w, r, nil) within your HTTP handler to upgrade the connection.
package main
import (
"fmt"
"net/http"
"github.com/lesismal/nbio/nbhttp/websocket"
)
var (
upgrader = newUpgrader()
)
func newUpgrader() *websocket.Upgrader {
u := websocket.NewUpgrader()
u.OnOpen(func(c *websocket.Conn) {
// echo
fmt.Println("OnOpen:", c.RemoteAddr().String())
})
u.OnMessage(func(c *websocket.Conn, messageType websocket.MessageType, data []byte) {
// echo
fmt.Println("OnMessage:", messageType, string(data))
c.WriteMessage(messageType, data)
})
u.OnClose(func(c *websocket.Conn, err error) {
fmt.Println("OnClose:", c.RemoteAddr().String(), err)
})
return u
}
func onWebsocket(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
panic(err)
}
fmt.Println("Upgraded:", conn.RemoteAddr().String())
}
func main() {
mux := &http.ServeMux{}
mux.HandleFunc("/ws", onWebsocket)
server := http.Server{
Addr: "localhost:8080",
Handler: mux,
}
fmt.Println("server exit:", server.ListenAndServe())
}