Documentation
¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func TransformToWS ¶
func TransformToWS(wsFunc WSHandlerFunc, responseHeader http.Header, wrappers []WSConnWrapper) gin.HandlerFunc
TransformToWS 将 Gin 的 HTTP 连接转换为 WebSocket 连接 他接受一个 WSHandlerFunc 用来处理具体的 WebSocket 事务。
Example ¶
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"github.com/robfig/cron/v3"
"log"
)
func main() {
go func() {
c := cron.New(cron.WithSeconds())
_, _ = c.AddFunc("* * * * * *", task)
c.Start()
}()
log.SetFlags(log.Lshortfile | log.LstdFlags)
var router = gin.Default()
router.GET("/ws", TransformToWS(ping, nil, []WSConnWrapper{SaveConn}))
if err := router.Run(":8888"); err != nil {
log.Println(err)
}
}
func SaveConn(ws *websocket.Conn) {
webSocketConnList = append(webSocketConnList, ws)
}
var webSocketConnList = make([]*websocket.Conn, 0)
var canvas string
var canvasVersion int
func ping(ws *websocket.Conn) {
for {
_, message, err := ws.ReadMessage()
fmt.Println(string(message))
if err != nil {
break
}
canvas += string(message)
canvasVersion++
}
}
var version = 0
func task() {
if version == canvasVersion {
return
}
for _, conn := range webSocketConnList {
fmt.Println(canvas)
err := conn.WriteMessage(websocket.TextMessage, []byte(canvas))
if err != nil {
break
}
version = canvasVersion
}
}
Types ¶
type WSConnWrapper ¶
type WSHandlerFunc ¶
Click to show internal directories.
Click to hide internal directories.