代码拉取完成,页面将自动刷新
// Package websocket
// @Link https://gitee.com/linngc/central-mirror
// @Copyright Copyright (c) 2024 central-mirror CLI
// @Author linngc
// @License
package websocket
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gorilla/websocket"
"net/http"
"runtime"
)
var (
// Manager 客户端管理
Manager = NewClientManager()
// 用户连接超时时间,默认指定为6分钟
heartbeatExpirationTime = uint64(6 * 60)
// 读写数据默认chan通道大小
numCPU = runtime.NumCPU() + 1
)
var upGrader = websocket.Upgrader{
ReadBufferSize: numCPU,
WriteBufferSize: numCPU,
CheckOrigin: func(r *http.Request) bool {
return true
},
}
// Websocket 初始化websocket方法
// 调用说明 ws://127.0.0.1:10010/api/wss/sysMonitor?unique=111
// 使用提醒:使用通道操作,对数据进行读取和发送
func Websocket(ctx context.Context, r *ghttp.Request, readFunc ...func(ctx context.Context, request *WRequest) error) error {
conn, err := upGrader.Upgrade(r.Response.ResponseWriter, r.Request, nil)
if err != nil {
return err
}
//获取链接用户id
unique := r.Get("unique")
if unique == nil {
return err
}
currentTime := uint64(gtime.Now().Unix())
client := NewUniqueClient(conn.RemoteAddr().String(), conn, unique.Uint64(), currentTime)
go client.read(ctx, readFunc...)
go client.write(ctx)
// 用户连接事件
Manager.Register <- client
return nil
}
// StartWebSocket 初始化gcmd.Command时调用,并在g.Server()对象之前调用执行
func StartWebSocket(ctx context.Context) {
g.Log().Info(ctx, "[开始]启动:WebSocket模块加载")
//消息处理
go Manager.startChan(ctx)
//心跳处理
go Manager.ping(ctx)
g.Log().Info(ctx, "[完成]启动:WebSocket模块加载")
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。