gin + "golang.org/x/net/websocket"
package main
import (
"github.com/gin-gonic/gin"
"golang.org/x/net/websocket"
"log"
"time"
)
func main() {
log.SetFlags(log.Lshortfile | log.LstdFlags)
var router = gin.Default()
router.GET("/ws", ginWebsocketHandler(wsConnHandle))
if err := router.Run(":9898"); err != nil {
log.Println(err)
}
}
// websocket.Handler 转 gin HandlerFunc
func ginWebsocketHandler(wsConnHandle websocket.Handler) gin.HandlerFunc {
return func(c *gin.Context) {
log.Printf("new ws request: %v", c.Request.RemoteAddr)
if c.IsWebsocket() {
wsConnHandle.ServeHTTP(c.Writer, c.Request)
} else {
_, _ = c.Writer.WriteString("===not websocket request===")
}
}
}
// websocket连接处理
func wsConnHandle(conn *websocket.Conn) {
for {
var msg string
if err := websocket.Message.Receive(conn, &msg); err != nil {
log.Println(err)
return
}
log.Printf("recv: %v", msg)
data := []byte(time.Now().Format(time.RFC3339))
if _, err := conn.Write(data); err != nil {
log.Println(err)
return
}
}
}