From 7e55d52874b011fedc940fda0838155c619eb9f0 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 20 Oct 2023 14:43:37 +0800 Subject: [PATCH 1/5] fix --- server/websocket/internal/logic/datatransferlogic.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 827717f8..84eb8fa5 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -213,7 +213,7 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo *auth.Use } //存在是不能给他申请重新绑定 if _, ok := mapConnPool.Load(oldWid); ok { - logx.Error("复用的连接标识已被其他客户端使用,不符合重用条件") + logx.Error("复用的连接标识已被其他客户端使用,不符合重用条件,用户id:", userInfo.UserId, " guest_id:", userInfo.GuestId) break } logx.Info("====复用旧的ws连接成功====") From 6c341590eefb18473c8527744c287c0c6f432eab Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 20 Oct 2023 15:14:41 +0800 Subject: [PATCH 2/5] fix --- constants/websocket.go | 3 --- server/websocket/internal/handler/routes.go | 5 +++++ server/websocket/internal/logic/datatransferlogic.go | 10 +--------- server/websocket/internal/types/types.go | 9 +++++++++ server_api/websocket.api | 11 +++++++++++ utils/websocket_data/base_data.go | 6 ------ 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/constants/websocket.go b/constants/websocket.go index ce802d68..4fd14ff5 100644 --- a/constants/websocket.go +++ b/constants/websocket.go @@ -9,9 +9,6 @@ const ( WEBSOCKET_CONNECT_SUCCESS Websocket = "WEBSOCKET_CONNECT_SUCCESS" //ws连接成功 (1级消息,单向通信) ) -// 心跳 -const WEBSOCKET_HEARTBEAT Websocket = "WEBSOCKET_HEARTBEAT" - // websocket消息类型(通用通知类别) const ( WEBSOCKET_COMMON_NOTIFY Websocket = "WEBSOCKET_COMMON_NOTIFY" //通用回调通知(1级消息,单向通信) diff --git a/server/websocket/internal/handler/routes.go b/server/websocket/internal/handler/routes.go index 4eefa507..99277e25 100644 --- a/server/websocket/internal/handler/routes.go +++ b/server/websocket/internal/handler/routes.go @@ -32,6 +32,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/api/websocket/close_websocket", Handler: CloseWebsocketHandler(serverCtx), }, + { + Method: http.MethodPost, + Path: "/api/websocket/get_stat", + Handler: GetStatHandler(serverCtx), + }, }, ) } diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 84eb8fa5..3f9360eb 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -321,15 +321,7 @@ func (w *wsConnectItem) heartbeat() { if w.debug != nil && w.debug.Exp != nil && *w.debug.Exp < time.Now().UTC().Unix() { w.debug = nil } - //发送心跳信息 - var d interface{} - if w.debug != nil { - d = websocket_data.HeartBeatMsg{ - WsCount: currentWebsocketConnectCount, - CombineCount: currentRequestCombineApiCount, - } - } - if err := w.conn.WriteMessage(websocket.PongMessage, w.respondDataFormat(constants.WEBSOCKET_HEARTBEAT, d)); err != nil { + if err := w.conn.WriteMessage(websocket.PongMessage, nil); err != nil { logx.Error("发送心跳信息异常,关闭连接:", w.uniqueId, err) w.close() return diff --git a/server/websocket/internal/types/types.go b/server/websocket/internal/types/types.go index 316ac30d..35707fc1 100644 --- a/server/websocket/internal/types/types.go +++ b/server/websocket/internal/types/types.go @@ -29,6 +29,15 @@ type CloseWebsocketReq struct { Wid string `json:"wid"` } +type GetStatReq struct { + Password string `form:"password"` +} + +type GetStatRsp struct { + WsTotalCount int `json:"ws_total_count"` //ws连接数 + CurRequestCombineCount int `json:"cur_request_combine_count"` +} + type Request struct { } diff --git a/server_api/websocket.api b/server_api/websocket.api index 43a39910..1084e7e5 100644 --- a/server_api/websocket.api +++ b/server_api/websocket.api @@ -21,6 +21,9 @@ service websocket { //关闭某个连接 @handler CloseWebsocketHandler post /api/websocket/close_websocket(CloseWebsocketReq) returns (response); + //获取ws统计信息 + @handler GetStatHandler + post /api/websocket/get_stat(GetStatReq) returns (response); } //websocket数据交互[ @@ -46,4 +49,12 @@ type CommonNotifyReq { //关闭连接 type CloseWebsocketReq { Wid string `json:"wid"` +} +//获取ws统计信息 +type GetStatReq { + Password string `form:"password"` +} +type GetStatRsp { + WsTotalCount int `json:"ws_total_count"` //ws连接数 + CurRequestCombineCount int `json:"cur_request_combine_count"` } \ No newline at end of file diff --git a/utils/websocket_data/base_data.go b/utils/websocket_data/base_data.go index 69f8c33f..d9d4476d 100644 --- a/utils/websocket_data/base_data.go +++ b/utils/websocket_data/base_data.go @@ -23,9 +23,3 @@ type ConnectErrMsg struct { type ConnectUnAuth struct { Message string `json:"message"` } - -// 心跳数据 -type HeartBeatMsg struct { - WsCount int `json:"ws_count"` - CombineCount int `json:"combine_count"` -} From 65f7e1bee4232960a88e27f573d7906c0a9f605b Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 20 Oct 2023 15:14:48 +0800 Subject: [PATCH 3/5] fix --- .../internal/handler/getstathandler.go | 35 +++++++++++++++ .../websocket/internal/logic/getstatlogic.go | 45 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 server/websocket/internal/handler/getstathandler.go create mode 100644 server/websocket/internal/logic/getstatlogic.go diff --git a/server/websocket/internal/handler/getstathandler.go b/server/websocket/internal/handler/getstathandler.go new file mode 100644 index 00000000..3e38aa95 --- /dev/null +++ b/server/websocket/internal/handler/getstathandler.go @@ -0,0 +1,35 @@ +package handler + +import ( + "net/http" + "reflect" + + "fusenapi/utils/basic" + + "fusenapi/server/websocket/internal/logic" + "fusenapi/server/websocket/internal/svc" + "fusenapi/server/websocket/internal/types" +) + +func GetStatHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + + var req types.GetStatReq + userinfo, err := basic.RequestParse(w, r, svcCtx, &req) + if err != nil { + return + } + + // 创建一个业务逻辑层实例 + l := logic.NewGetStatLogic(r.Context(), svcCtx) + + rl := reflect.ValueOf(l) + basic.BeforeLogic(w, r, rl) + + resp := l.GetStat(&req, userinfo) + + if !basic.AfterLogic(w, r, rl, resp) { + basic.NormalAfterLogic(w, r, resp) + } + } +} diff --git a/server/websocket/internal/logic/getstatlogic.go b/server/websocket/internal/logic/getstatlogic.go new file mode 100644 index 00000000..b36029ee --- /dev/null +++ b/server/websocket/internal/logic/getstatlogic.go @@ -0,0 +1,45 @@ +package logic + +import ( + "context" + "fusenapi/utils/auth" + "fusenapi/utils/basic" + + "fusenapi/server/websocket/internal/svc" + "fusenapi/server/websocket/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type GetStatLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetStatLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetStatLogic { + return &GetStatLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +// 处理进入前逻辑w,r +// func (l *GetStatLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { +// } + +func (l *GetStatLogic) GetStat(req *types.GetStatReq, userinfo *auth.UserInfo) (resp *basic.Response) { + if req.Password != "fusen1314" { + return resp.SetStatusWithMessage(basic.CodeOK, "你干嘛,哎哟") + } + return resp.SetStatusWithMessage(basic.CodeOK, "success", types.GetStatRsp{ + WsTotalCount: currentWebsocketConnectCount, + CurRequestCombineCount: currentRequestCombineApiCount, + }) +} + +// 处理逻辑后 w,r 如:重定向, resp 必须重新处理 +// func (l *GetStatLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { +// // httpx.OkJsonCtx(r.Context(), w, resp) +// } From d197771eb3d9ea3ea6f4e4c079aebe81d6383c61 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 20 Oct 2023 15:15:03 +0800 Subject: [PATCH 4/5] fix --- server_api/websocket.api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_api/websocket.api b/server_api/websocket.api index 1084e7e5..02e8b3c6 100644 --- a/server_api/websocket.api +++ b/server_api/websocket.api @@ -23,7 +23,7 @@ service websocket { post /api/websocket/close_websocket(CloseWebsocketReq) returns (response); //获取ws统计信息 @handler GetStatHandler - post /api/websocket/get_stat(GetStatReq) returns (response); + get /api/websocket/get_stat(GetStatReq) returns (response); } //websocket数据交互[ From 28ad9528d2918ba43e47aae3b3a947ba3f0b8094 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 20 Oct 2023 15:15:27 +0800 Subject: [PATCH 5/5] fix --- server/websocket/internal/handler/routes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/websocket/internal/handler/routes.go b/server/websocket/internal/handler/routes.go index 99277e25..5e29f9bb 100644 --- a/server/websocket/internal/handler/routes.go +++ b/server/websocket/internal/handler/routes.go @@ -33,7 +33,7 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Handler: CloseWebsocketHandler(serverCtx), }, { - Method: http.MethodPost, + Method: http.MethodGet, Path: "/api/websocket/get_stat", Handler: GetStatHandler(serverCtx), },