websocket

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 5, 2021 License: MIT Imports: 4 Imported by: 0

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
	}
}
Output:

Types

type WSConnWrapper

type WSConnWrapper func(ws *websocket.Conn)

type WSHandlerFunc

type WSHandlerFunc func(ws *websocket.Conn)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL