From 47e35b35bd6fc0497a7550c37c598227f695fb8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=BE=B7=E6=BB=A1?= Date: Sun, 18 Apr 2021 20:11:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=B9=B6=E5=8F=91=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8B,TraceID=E5=8F=AF=E8=83=BD=E4=BA=92=E7=9B=B8?= =?UTF-8?q?=E8=A6=86=E7=9B=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- construct.go | 2 +- context/context.go | 25 ++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/construct.go b/construct.go index 3d927e7..458a67d 100644 --- a/construct.go +++ b/construct.go @@ -160,7 +160,7 @@ func initServer(wsInstance abstract.IWebsocket) { // TODO : 增加指令回调失败的callback ctxInterface, _ := session.Get("ws_context") ctx := ctxInterface.(*context.WSContext) - _ = dispatchCommand(ctx, bytes) + _ = dispatchCommand(context.CloneContext(ctx), bytes) }) // 3, 关闭连接的处理函数 wsServerTable[wsInstance.GetServerPort()][wsInstance.GetModuleFlag()].wsServer.HandleClose(func(session *melody.Session, i int, s string) error { diff --git a/context/context.go b/context/context.go index 08bb5bc..b7a8026 100644 --- a/context/context.go +++ b/context/context.go @@ -27,7 +27,8 @@ import ( // // Date : 7:03 下午 2021/3/27 type WSContext struct { - ConnectionID string // 请求ID + ConnectionID string // 请求ID / 连接ID, 一个生命周期内, 此值不会发生变化 + TraceID string // 请求ID,每次指令执行都会发生变化,是针对一次请求有效的 Flag string // 长连接模块 GinCtx *gin.Context // 基于gin实现websocket, gin的上下文 Session *melody.Session // 长连接的会话 @@ -46,6 +47,7 @@ func NewContext(ginCtx *gin.Context, flag string, session *melody.Session) *WSCo l, _ := easylock.NewSegment(128) return &WSContext{ ConnectionID: generateConnectionID(flag), + TraceID: generateConnectionID(flag), Flag: flag, GinCtx: ginCtx, Session: session, @@ -55,6 +57,27 @@ func NewContext(ginCtx *gin.Context, flag string, session *melody.Session) *WSCo } } +//CloneContext 克隆上下文信息 +// +// Author : go_developer@163.com<张德满> +// +// Date : 8:07 下午 2021/4/18 +func CloneContext(ctx *WSContext) *WSContext { + if nil == ctx { + return nil + } + return &WSContext{ + ConnectionID: ctx.ConnectionID, + TraceID: generateConnectionID(ctx.Flag), + Flag: ctx.Flag, + GinCtx: ctx.GinCtx, + Session: ctx.Session, + Server: ctx.Server, + Data: ctx.Data, + Lock: ctx.Lock, + } +} + // generateConnectionID 生成connection_id // // Author : go_developer@163.com<张德满>