fix(socket): 异步处理连接关闭逻辑

将连接关闭时的数据保存和资源清理操作提交到工作池中异步执行,
避免阻塞主线程。但需要注意可能存在执行顺序问题,需要进一步修复。
```
This commit is contained in:
2025-10-28 23:56:15 +08:00
parent 32d60e8d91
commit c41646eac8

View File

@@ -54,17 +54,20 @@ func (s *Server) OnClose(c gnet.Conn, _ error) (action gnet.Action) {
atomic.AddInt64(&s.connected, -1) atomic.AddInt64(&s.connected, -1)
//logging.Infof("conn[%v] disconnected", c.RemoteAddr().String()) //logging.Infof("conn[%v] disconnected", c.RemoteAddr().String())
v, _ := c.Context().(*player.ClientData) v, _ := c.Context().(*player.ClientData)
v.Lf.Close() //关闭lockfree s.workerPool.Submit(func() { //TODO 这里可能存在顺序执行问题,待修复
v.Lf.Close() //关闭lockfree
if v.Player != nil {
//cool.Loger.Info(context.TODO(), "准备保存", v.Player.Info.UserID)
v.Player.Save() //保存玩家数据
//cool.Loger.Info(context.TODO(), "保存完成", v.Player.Info.UserID)
if v.CloseChan != nil {
close(v.CloseChan)
}
if v.Player != nil {
//cool.Loger.Info(context.TODO(), "准备保存", v.Player.Info.UserID)
v.Player.Save() //保存玩家数据
//cool.Loger.Info(context.TODO(), "保存完成", v.Player.Info.UserID)
if v.CloseChan != nil {
close(v.CloseChan)
} }
} })
//} //}
//关闭连接 //关闭连接