1 Star 0 Fork 0

linngc / central-mirror

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
websocket.go 1.79 KB
一键复制 编辑 原始数据 按行查看 历史
linngc 提交于 2024-03-08 18:15 . add:添加pprof方法
// 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模块加载")
}
Go
1
https://gitee.com/linngc/central-mirror.git
git@gitee.com:linngc/central-mirror.git
linngc
central-mirror
central-mirror
4aaf4b1e930c

搜索帮助