解决并发情况下,TraceID可能互相覆盖问题
This commit is contained in:
parent
0ddab40835
commit
47e35b35bd
@ -160,7 +160,7 @@ func initServer(wsInstance abstract.IWebsocket) {
|
|||||||
// TODO : 增加指令回调失败的callback
|
// TODO : 增加指令回调失败的callback
|
||||||
ctxInterface, _ := session.Get("ws_context")
|
ctxInterface, _ := session.Get("ws_context")
|
||||||
ctx := ctxInterface.(*context.WSContext)
|
ctx := ctxInterface.(*context.WSContext)
|
||||||
_ = dispatchCommand(ctx, bytes)
|
_ = dispatchCommand(context.CloneContext(ctx), bytes)
|
||||||
})
|
})
|
||||||
// 3, 关闭连接的处理函数
|
// 3, 关闭连接的处理函数
|
||||||
wsServerTable[wsInstance.GetServerPort()][wsInstance.GetModuleFlag()].wsServer.HandleClose(func(session *melody.Session, i int, s string) error {
|
wsServerTable[wsInstance.GetServerPort()][wsInstance.GetModuleFlag()].wsServer.HandleClose(func(session *melody.Session, i int, s string) error {
|
||||||
|
@ -27,7 +27,8 @@ import (
|
|||||||
//
|
//
|
||||||
// Date : 7:03 下午 2021/3/27
|
// Date : 7:03 下午 2021/3/27
|
||||||
type WSContext struct {
|
type WSContext struct {
|
||||||
ConnectionID string // 请求ID
|
ConnectionID string // 请求ID / 连接ID, 一个生命周期内, 此值不会发生变化
|
||||||
|
TraceID string // 请求ID,每次指令执行都会发生变化,是针对一次请求有效的
|
||||||
Flag string // 长连接模块
|
Flag string // 长连接模块
|
||||||
GinCtx *gin.Context // 基于gin实现websocket, gin的上下文
|
GinCtx *gin.Context // 基于gin实现websocket, gin的上下文
|
||||||
Session *melody.Session // 长连接的会话
|
Session *melody.Session // 长连接的会话
|
||||||
@ -46,6 +47,7 @@ func NewContext(ginCtx *gin.Context, flag string, session *melody.Session) *WSCo
|
|||||||
l, _ := easylock.NewSegment(128)
|
l, _ := easylock.NewSegment(128)
|
||||||
return &WSContext{
|
return &WSContext{
|
||||||
ConnectionID: generateConnectionID(flag),
|
ConnectionID: generateConnectionID(flag),
|
||||||
|
TraceID: generateConnectionID(flag),
|
||||||
Flag: flag,
|
Flag: flag,
|
||||||
GinCtx: ginCtx,
|
GinCtx: ginCtx,
|
||||||
Session: session,
|
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
|
// generateConnectionID 生成connection_id
|
||||||
//
|
//
|
||||||
// Author : go_developer@163.com<张德满>
|
// Author : go_developer@163.com<张德满>
|
||||||
|
Loading…
Reference in New Issue
Block a user