From: qydysky Date: Sun, 31 Mar 2024 14:37:46 +0000 (+0800) Subject: Improve api校验失败重试 X-Git-Tag: v0.13.7~5 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=c4d3248a3a34c6a3d5abe34362588de7f6841ffc;p=bili_danmu%2F.git Improve api校验失败重试 --- diff --git a/F/api.go b/F/api.go index 6129bd5..ad8d711 100644 --- a/F/api.go +++ b/F/api.go @@ -11,6 +11,7 @@ import ( "strconv" "strings" "sync" + "sync/atomic" "time" c "github.com/qydysky/bili_danmu/CV" @@ -35,7 +36,8 @@ var api_limit = limit.New(2, "1s", "30s") //频率限制2次/s,最大等待时 type GetFunc struct { *c.Common - l sync.RWMutex + count atomic.Int32 + l sync.RWMutex } type cacheItem struct { @@ -50,6 +52,14 @@ func Get(c *c.Common) *GetFunc { func (c *GetFunc) Get(key string) { apilog := apilog.Base_add(`Get`) + current := c.count.Add(1) + defer c.count.Add(-1) + + if current > 10 { + apilog.L(`E: `, `max loop`) + return + } + if api_limit.TO() { return } //超额请求阻塞,超时将取消 @@ -219,7 +229,9 @@ func (c *GetFunc) Get(key string) { } ) - if fList, ok := api_can_get[key]; ok { + if fList, ok := api_can_get[key]; !ok { + apilog.L(`E: `, `no api`, key) + } else { for _, fItem := range fList { apilog.Log_show_control(false).L(`T: `, `Get`, key) @@ -254,13 +266,17 @@ func (c *GetFunc) Get(key string) { continue } } + if checkf, ok := check[key]; ok { c.l.RLock() if checkf() { c.l.RUnlock() break + } else { + c.l.RUnlock() + apilog.L(`W: `, `check fail`, key) + c.Get(key) } - c.l.RUnlock() } } } diff --git a/go.mod b/go.mod index 474fa23..1edf956 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.22 require ( github.com/gotk3/gotk3 v0.6.3 github.com/mdp/qrterminal/v3 v3.2.0 - github.com/qydysky/part v0.28.20240325172911 + github.com/qydysky/part v0.28.20240331120148 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 golang.org/x/text v0.14.0 diff --git a/go.sum b/go.sum index 032bbbe..65dc13e 100644 --- a/go.sum +++ b/go.sum @@ -37,8 +37,8 @@ github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdh github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/qydysky/part v0.28.20240325172911 h1:2wu7BIpfsxvoXYZjzd79NQCU4B4ZY61Iu97NwxvupRQ= -github.com/qydysky/part v0.28.20240325172911/go.mod h1:XytV5dI1Y7+qvjhsa2TMvi55RBZQQf0LCDYQ1kUCYqM= +github.com/qydysky/part v0.28.20240331120148 h1:LiZsVm+U50+Lf+L6b+MaGZcytoQCnWVWZ35axOeyebs= +github.com/qydysky/part v0.28.20240331120148/go.mod h1:XytV5dI1Y7+qvjhsa2TMvi55RBZQQf0LCDYQ1kUCYqM= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=