add lock for httpclient

This commit is contained in:
Star 2025-01-14 14:36:09 +08:00
parent 209ef78919
commit e26621a43c
2 changed files with 23 additions and 9 deletions

20
api.go
View File

@ -109,11 +109,25 @@ func init() {
gojsObj := gojs.Map{}
for cloudName, actions := range fixedCloudConfigs {
httpClients[cloudName] = map[int]*httpclient.ClientPool{}
httpClientsLock.RLock()
hcSet := httpClients[cloudName]
httpClientsLock.RUnlock()
if hcSet == nil {
hcSet = map[int]*httpclient.ClientPool{}
httpClientsLock.Lock()
httpClients[cloudName] = hcSet
httpClientsLock.Unlock()
}
cloudObj := map[string]any{}
for actionName, action := range actions {
if _, ok := httpClients[cloudName][action.Timeout]; !ok {
httpClients[cloudName][action.Timeout] = httpclient.GetClient(time.Duration(action.Timeout) * time.Millisecond)
httpClientsLock.RLock()
_, hcOK := hcSet[action.Timeout]
httpClientsLock.RUnlock()
if !hcOK {
hc := httpclient.GetClient(time.Duration(action.Timeout) * time.Millisecond)
httpClientsLock.Lock()
hcSet[action.Timeout] = hc
httpClientsLock.Unlock()
}
cloudObj[actionName] = makeAction(cloudName, action)
}

12
go.mod
View File

@ -3,12 +3,12 @@ module apigo.cc/cloud
go 1.18
require (
apigo.cc/gojs v0.0.4
apigo.cc/gojs v0.0.12
github.com/gorilla/websocket v1.5.3
github.com/ssgo/config v1.7.9
github.com/ssgo/httpclient v1.7.8
github.com/ssgo/log v1.7.7
github.com/ssgo/u v1.7.11
github.com/ssgo/u v1.7.13
)
require (
@ -17,9 +17,9 @@ require (
github.com/go-sourcemap/sourcemap v2.1.4+incompatible // indirect
github.com/google/pprof v0.0.0-20240409012703-83162a5b38cd // indirect
github.com/ssgo/standard v1.7.7 // indirect
github.com/ssgo/tool v0.4.27 // indirect
golang.org/x/net v0.31.0 // indirect
golang.org/x/sys v0.27.0 // indirect
golang.org/x/text v0.20.0 // indirect
github.com/ssgo/tool v0.4.28 // indirect
golang.org/x/net v0.32.0 // indirect
golang.org/x/sys v0.28.0 // indirect
golang.org/x/text v0.21.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)