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<张德满>