Skip to content

Commit

Permalink
更新并发锁问题
Browse files Browse the repository at this point in the history
  • Loading branch information
jxhczhl committed Nov 20, 2024
1 parent 3d303a6 commit d601c14
Showing 1 changed file with 11 additions and 17 deletions.
28 changes: 11 additions & 17 deletions core/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,37 +15,31 @@ func (c *Clients) GQueryFunc(funcName string, param string, resChan chan<- strin
WriteData := Message{Param: param, MessageId: MessageId, Action: funcName}
data, _ := json.Marshal(WriteData)
clientWs := c.clientWs
gm.Lock()
// 先判断action是否需要初始化
if c.actionData[funcName] == nil {
c.actionData[funcName] = make(map[string]chan string)
}
if c.actionData[funcName][MessageId] == nil {
c.actionData[funcName][MessageId] = make(chan string, 1) //此次action初始化1个消息
}
gm.Lock()
err := clientWs.WriteMessage(1, data)
gm.Unlock()
if err != nil {
fmt.Println(err, "写入数据失败")
}
resultFlag := false
for i := 0; i < config.DefaultTimeout*10; i++ {
if len(c.actionData[funcName][MessageId]) > 0 {
res := <-c.actionData[funcName][MessageId]
resChan <- res
resultFlag = true
break
}
time.Sleep(time.Millisecond * 100)
}
// 循环完了还是没有数据,那就超时退出
if true != resultFlag {
select {
case res := <-c.actionData[funcName][MessageId]:
resChan <- res
case <-time.After(time.Duration(config.DefaultTimeout) * time.Second):
resChan <- "黑脸怪:timeout"
}
defer func() {
close(resChan)
delete(c.actionData[funcName], MessageId)
}()
// 清理资源
gm.Lock()
delete(c.actionData[funcName], MessageId)
gm.Unlock()

close(resChan)
}

func getRandomClient(group string, clientId string) *Clients {
Expand Down

0 comments on commit d601c14

Please sign in to comment.