From 7c2b8a5b0ce97694535fff81cfa1bfd5dd3c6dcd Mon Sep 17 00:00:00 2001 From: danial Date: Tue, 28 Oct 2025 23:25:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(utils):=E4=BF=AE=E5=A4=8D=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E6=B1=A0=E4=B8=AD=E7=9A=84=E7=A9=BA=E6=8C=87=E9=92=88=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在遍历代理时跳过空代理对象 - 修正删除无效代理时的并发访问问题-优化代理过滤逻辑避免潜在崩溃 --- .drone.yml | 20 ++++++++++---------- internal/utils/proxy_pool.go | 7 +++++-- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/.drone.yml b/.drone.yml index 306bdf7..45d1765 100644 --- a/.drone.yml +++ b/.drone.yml @@ -26,16 +26,16 @@ steps: - docker push git.oceanpay.cc/danial/kami_gateway_${DRONE_BRANCH}:${DRONE_BUILD_NUMBER} - docker push git.oceanpay.cc/danial/kami_gateway_${DRONE_BRANCH}:latest - docker logout git.oceanpay.cc - - name: deploy to docker compose - environment: - DOCKER_LOGIN: - from_secret: docker_login - DOCKER_TOKEN: - from_secret: docker_token - commands: - - docker login git.oceanpay.cc -u $DOCKER_LOGIN -p $DOCKER_TOKEN - - BRANCH=${DRONE_BRANCH} VERSION=${DRONE_BUILD_NUMBER} docker compose -f /data/kami/docker-compose.yaml --profile gateway up -d - - docker logout git.oceanpay.cc +# - name: deploy to docker compose +# environment: +# DOCKER_LOGIN: +# from_secret: docker_login +# DOCKER_TOKEN: +# from_secret: docker_token +# commands: +# - docker login git.oceanpay.cc -u $DOCKER_LOGIN -p $DOCKER_TOKEN +# - BRANCH=${DRONE_BRANCH} VERSION=${DRONE_BUILD_NUMBER} docker compose -f /data/kami/docker-compose.yaml --profile gateway up -d +# - docker logout git.oceanpay.cc trigger: branch: diff --git a/internal/utils/proxy_pool.go b/internal/utils/proxy_pool.go index b3f6650..81c5a22 100644 --- a/internal/utils/proxy_pool.go +++ b/internal/utils/proxy_pool.go @@ -201,6 +201,9 @@ func (p *OrderBasedProxyStrategy) getUnderLimitedProxy(ctx context.Context, perI p.mu.RLock() for _, proxies := range p.proxies { for _, proxy := range proxies { + if proxy == nil { + continue + } // 排除指定通道的代理 excluded := slices.Contains(excludeChannels, proxy.channel) if !excluded { @@ -221,8 +224,8 @@ func (p *OrderBasedProxyStrategy) getUnderLimitedProxy(ctx context.Context, perI func() { p.mu.Lock() defer p.mu.Lock() - for _, infos := range p.proxies { - slices.DeleteFunc(infos, func(info *ProxyInfo) bool { + for index, infos := range p.proxies { + p.proxies[index] = slices.DeleteFunc(infos, func(info *ProxyInfo) bool { return (info != nil && info.proxy == proxy) || info == nil }) }